我是WPF绑定/模板的新手。我有一些关于模板化TabControl的基本问题,如下所示:
<TabControl x:Name="tcTabs" ItemsSource="{Binding Rooms, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Margin="5" BorderThickness="1" IsSynchronizedWithCurrentItem="True">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Name}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="130"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="22"/>
</Grid.RowDefinitions>
<ListBox Grid.Row="0" Grid.Column="0" BorderThickness="0" ItemsSource="{Binding Messages}" DisplayMemberPath="Raw" />
<ListBox Grid.Row="0" Grid.Column="1" BorderThickness="1,0,0,0" BorderBrush="#FFBBBBBB" ItemsSource="{Binding Users}" DisplayMemberPath="Nick" />
<TextBox Grid.Row="1" Grid.ColumnSpan="2" BorderThickness="0,1,0,0" BorderBrush="#FFBBBBBB" Height="22" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
TabControl在每个选项卡中包含2个列表框和一个文本框。其中一个包含用户名的列表框不是必须的。
有3种标签,服务器标签,房间标签和私人标签。在私人和服务器选项卡中,用户列表不应存在或隐藏。
我在绑定的房间对象上有一个枚举:
public enum IRCRoomType
{
Server,
Channel,
Private
}
如何基于枚举自动隐藏用户列表,我已经看到了2种方法的样本,对转换器或触发器的可见性的绑定。哪种方法更好,还有更多吗?
如果没有制表符,并且创建了第一个制表符,则不会自动选择它,如何选择它?
是否有一种方法可以根据标签类型影响列表框中的项目样式?我将如何实现这一目标?
我只是在寻找链接/提示而不是实际的解决方案,但是如果你能提供代码那么这将是一个奖励!
答案 0 :(得分:0)
这取决于代码的复杂程度。如果它很简单,我宁愿使用Trigger(你在XAML中拥有下面的所有内容),但是如果代码要复杂得多,请考虑使用转换器(它实际上更简单易用)
绑定到List的SelectedIndex并将其设置为0?
是的,当然,您可以将ContentControl
与DataTemplate
一起使用(或者在某些情况下只使用DataTemplate)我使用它的一些代码:
<ListBox>
<ListBox.Resources>
<DataTemplate DataType="{x:Type your_namespace:your_type}">
... your code ...
</DataTemplate>
<DataTemplate DataType="{x:Type system:String}">
... your code ...
</DataTemplate>
</ListBox.Resources>
</ListBox>
您发布的代码实际上是新的Template
,但您已更改了Style
。请考虑覆盖一些Template
。
祝你好运