В WPF, как я могу добавить границу для элемента управления в коде позади? - PullRequest
0 голосов
/ 30 марта 2009

В моем XAML я хочу динамически генерировать ListBox со следующим:

<ListBox Name="MainListBox">
  <Border Style="{DynamicResource ListBoxItemRoundedBorder}">
     <ListBoxItem >
        <TextBlock>
          Some Text Here
        </TextBlock>
     </ListBoxItem>
   </Border>

  <Border Style="{DynamicResource ListBoxItemRoundedBorder}">
     <ListBoxItem >
        <TextBlock>
          Some Text Here
        </TextBlock>
     </ListBoxItem>
   </Border>

  <Border Style="{DynamicResource ListBoxItemRoundedBorder}">
     <ListBoxItem >
        <TextBlock>
          Some Text Here
        </TextBlock>
     </ListBoxItem>
   </Border>
</ListBox>

Я хочу добавить элементы в этот список с помощью кода позади. Как я могу добавить элемент и границу с помощью кода позади. Я могу добавить элементы списка достаточно легко, но не могу определить границы:

 For Each s As String in MyArray
   Dim lbi as New ListBoxItem()
   Dim tb as New TextBlock()
   tb.Text = s
   lbi.content = tb
   MainListBox.Items.Add(lbi)
 Next

Редактировать: чтобы убрать путаницу, я хочу, чтобы вокруг каждого элемента ListBox была рамка. Я обновил XAML - фактически я хочу визуализировать этот XAML динамически или эквивалентно с помощью кода позади. У меня уже определен стиль границы.

Ответы [ 3 ]

2 голосов
/ 30 марта 2009

Я не понимаю. Если вам нужен Border, почему бы просто не наклеить его на снаружи ListBox? Я предполагаю, что вы хотите один Border за ListBoxItem. В этом случае просто измените ItemTemplate:

<ListBox>
    <ListBox.ItemTemplate>
        <Border>
            <TextBlock Text="{Binding}"/>
        </Border>
    </ListBox.ItemTemplate>
</ListBox>
2 голосов
/ 30 марта 2009

Обращались ли вы к шаблону ListBoxItem

Используйте это, чтобы получить эффект границы, который вы ищете

<Style x:Key="ListBoxItemRoundedBorder" TargetType="ListBoxItem">
  <Setter Property="SnapsToDevicePixels" Value="true"/>
  <Setter Property="OverridesDefaultStyle" Value="true"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBoxItem">
        <Border 
          Name="Border"
          Padding="2"
          SnapsToDevicePixels="true" Style="{DynamicResource RoundedBorder}">
          <ContentPresenter />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="Border" Property="Background"
                    Value="{StaticResource SelectedBackgroundBrush}"/>
          </Trigger>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground"
                    Value="{StaticResource DisabledForegroundBrush}"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Тогда в вашем списке используйте

<ListView ItemContainerStyle="{StaticResource ListBoxItemRoundedBorder}" />

Хотя, основываясь на вашем вопросе, я не могу точно понять, какой дизайн вы ищете. Вы ищете Список с рамкой вокруг него или список с рамкой вокруг каждого элемента?

1 голос
/ 12 марта 2011

"Я хочу добавить элементы в этот список с помощью кода позади."

Я только что создал страницу, которая динамически загружает элементы управления на страницу (на основе коллекции).

Итак, чтобы ответить на вопрос ... вы должны применить настройки (например, что сделано с шаблонами в xaml) в вашем коде. Вот пример на C #: (в vb первая строка должна начинаться с Dim listBoxStyle как Style ...)

Style listBoxStyle = new System.Windows.Style(typeof(ListBox));
listBoxStyle.Setters.Add(new Setter(ListBox.BorderThicknessProperty, new Thickness(0,0,0,0)));
ListBox rdoList = new ListBox();
rdoList.Resources.Add(typeof(ListBox), listBoxStyle);

Обратите внимание на толщину (). У меня нет границы, так как по умолчанию она есть. Вы можете сделать это с вашими текстовыми полями и просто добавить толщину, как (1,1,1,1).

Не знаю, как вы вызываете динамические элементы управления из кода, но вы можете просмотреть этот пост, чтобы получить простой способ доступа к динамическим элементам управления wpf по значению имени из кода .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...