在我的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。我已经定义了边框样式。
答案 0 :(得分:2)
您是否参与了模仿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 :(得分:2)
我不明白。如果你想要一个Border
,为什么不把它贴在ListBox
的外面上呢?我假设你需要一个Border
每ListBoxItem
。在这种情况下,只需修改ItemTemplate
:
<ListBox>
<ListBox.ItemTemplate>
<Border>
<TextBlock Text="{Binding}"/>
</Border>
</ListBox.ItemTemplate>
</ListBox>
答案 2 :(得分:1)
“我想通过后面的代码将项目添加到此列表框中。”
我刚刚构建了一个页面,可以动态地将控件加载到页面上(基于集合)。
所以要回答这个问题......你必须在代码中应用设置(就像在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)。
不知道如何从代码中调用动态控件,但您可能需要view this post for an easy way to access dynamic wpf controls by name value from code。