WPF простые подсказки-и-приемы? [закрытый]

Я рекомендую вам начать строить макеты только с Row и Column, чтобы не запутаться. Я часто строю макеты следующим образом.

  1. Компоновка объектов (например, текста, изображения) только с Row и Column. И установить свойства mainAxisAlignment и crossAxisAlignment в Row и Column.
  2. Установите стили с помощью Padding или Align, Expanded и т. Д. Вы также можете использовать Container.
  3. Украсить дополнительно.

Ссылка:

Базовая раскладка:

https://flutter.dev/docs/development/ Пользовательский интерфейс / макет

Советы по созданию макетов:

https://medium.com/@liewjuntung/tips-on-using-android -studio-to-development-flutter-apps-9e42c047b7f4

Надеюсь, вам это поможет.

пример кода:


    Widget buildCard() {
      return Container(
        margin: EdgeInsets.all(10.0),
        decoration: BoxDecoration(
          color: Colors.white,
          boxShadow: [
            BoxShadow(
              color: Color.fromARGB(100, 0, 0, 0),
              blurRadius: 5,
            ),
          ],
        ),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Image.asset(
              'assets/card.png',
              height: 62,
              width: 62,
              fit: BoxFit.cover,
            ),
            Padding(
              padding: const EdgeInsets.only(top: 12.0, left: 12.0),
              child: Text(
                "Hello world",
                style: TextStyle(
                  fontWeight: FontWeight.w500,
                  letterSpacing: 0.8,
                ),
              ),
            )
          ],
        ),
      );
    }

19
задан 5 revs, 2 users 100% 19 July 2013 в 14:52
поделиться

14 ответов

Вычислить доступную недвижимость в процентах:

<Grid.RowDefinitions>
  <RowDefinition Height="0.25*"/>
  <RowDefinition Height="0.25*"/>
  <RowDefinition Height="0.25*"/>
  <RowDefinition Height="0.25*"/>
</Grid.RowDefinitions>

РЕДАКТИРОВАТЬ:

Это работает, но не указывает на то, как работает параметр *. Это:

<Grid.RowDefinitions>
  <RowDefinition Height="*"/>
  <RowDefinition Height="*"/>
  <RowDefinition Height="*"/>
  <RowDefinition Height="*"/>
</Grid.RowDefinitions>

обеспечивает ту же функциональность. Если вам нужно что-то другое, кроме строк с одинаковой высотой, вы можете использовать:

<Grid.RowDefinitions>
  <RowDefinition Height="1*"/>
  <RowDefinition Height="2*"/>
  <RowDefinition Height="3*"/>
  <RowDefinition Height="4*"/>
</Grid.RowDefinitions>

, который разделит доступную высоту на 10 и сохранит относительную высоту каждой строки. В качестве альтернативы значения могут быть 0,1, 0,2, 0,3 и 0,4 или любое пропорциональное значение.

3
ответ дан 30 November 2019 в 02:00
поделиться

Элемент управления с прозрачным фоном НЕ запускает события IsMouseOver или IsMouseDirectlyOver. Например, если для Border Background установлено значение Transparent, но BorderBrush = Blue и BorderWidth = <> 0, события MouseOver будут срабатывать при переходе самой границы, но не внутри элемента управления.

0
ответ дан 30 November 2019 в 02:00
поделиться

Вставьте двойные кавычки в контент:

<Button Name="Button"
        Background="AntiqueWhite"
        Content="{}{Background=&#0034;AntiqueWhite&#0034;}"/>
1
ответ дан 30 November 2019 в 02:00
поделиться

A Grid с Фон , оставленным по умолчанию или установленным с помощью кисти Transparent , не вызовет событие IsMouseOver , если курсор не находится над содержащим элементом управления. Чтобы событие запускалось по самой сетке , смоделируйте Прозрачность , установив Фон на цвет фона контейнера .

0
ответ дан 30 November 2019 в 02:00
поделиться

Включите фигурные скобки в содержимое элемента управления.

<Button Content="{}{This is not a markup extension.}"/>
5
ответ дан 30 November 2019 в 02:00
поделиться

IsMouseOver и IsMouseDirectlyOver - разные события. IsMouseOver реагирует на все движения мыши внутри элемента управления и его дочерних элементов. IsMouseDirectlyOver отвечает, только если курсор находится над самим элементом управления. Например, если у вас есть метка, содержащаяся внутри границы, событие IsMouseDirectlyOver для границы срабатывает, только если курсор находится над самой границей, но НЕ над содержащейся меткой.

5
ответ дан 30 November 2019 в 02:00
поделиться

Set a debug style that provides visual cues:

<Window.Resources>

  <Style x:Key="DebugGrid" TargetType="Grid">
    <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="ShowGridLines" Value="True"/>
      </Trigger>
    </Style.Triggers>
  </Style>

</Window.Resources>

<Grid Name="Grid"
      Style="{StaticResource DebugGrid}"
      Background="Black">...
7
ответ дан 30 November 2019 в 02:00
поделиться

Новой функцией WPF, поставляемой с 3.5 SP1, является возможность форматировать строку во время привязки. Это исключает использование IValueConverter для таких распространенных сценариев. Вот несколько примеров, которые я скопировал из этого сообщения в блоге

<TextBox Text="{Binding Path=Double, StringFormat=F3}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: \{0:C\}}"/>
<TextBox>
  <TextBox.Text>
    <Binding Path="Double" StringFormat="{}{0:C}"/>
  </TextBox.Text>
</TextBox>
12
ответ дан 30 November 2019 в 02:00
поделиться

Отладка привязки WPF.

Добавление трассировки для связанных свойств:

<Window …
 xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"/>
    <TextBlock Text="{Binding Path=Caption, 
diagnostics:PresentationTraceSources.TraceLevel=High}"…/>

В окне вывода вы получите подробную информацию о привязке:

PropertyChanged event from SomeObject (hash=1)
SetValue at level 0 from SomeObject (hash= 1) using RuntimePropertyInfo(Field): 
'False'
TransferValue - got raw value 'False'
TransferValue - using final value 'False'

// ИЗМЕНИТЬ Подробнее здесь .

Ариэль

19
ответ дан 30 November 2019 в 02:00
поделиться

Свойство - BorderThickness . Независимо от того, сколько раз вы набираете BorderWidth, это не сработает!

2
ответ дан 30 November 2019 в 02:00
поделиться

Заполнение и Поле вводятся с использованием синтаксиса с разделителями-запятыми и имеют тип «Толщина». Их можно ввести как:

  • Padding = "5" (Padding - 5 со всех четырех сторон)
  • Padding = "5,10,15,20" (Padding is Left: 5 Top: 10 Right: 15 Bottom : 20)
  • Padding = "5,10" (Padding составляет 5 слева / справа и 10 сверху / снизу)
3
ответ дан 30 November 2019 в 02:00
поделиться

Видимость - это система с тремя состояниями System.Windows. Видимость перечисление:

  • Visible - элемент отображается и участвует в макете.
  • Collapsed - элемент невидим и не участвует в макете. Фактически присваивает ему высоту и ширину 0 и ведет себя так, как будто его не существует.
  • Скрытый - элемент невидим, но продолжает участвовать в макете.
10
ответ дан 30 November 2019 в 02:00
поделиться

Укажите уникальную строку или столбец для GridSplitter , чтобы гарантировать, что он не будет скрыт другими элементами управления и ведет себя должным образом.

3
ответ дан 30 November 2019 в 02:00
поделиться

Установите недвижимость в коде для динамического управления:

Border_Toolbar.SetResourceReference(BackgroundProperty, "Brush_ToolbarBackground")
0
ответ дан 30 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: