我想根据属性显示Tab Item内容。有可能吗?
为了解释,我有另一个xaml,它嵌入在主xaml中,如下所示
<TabItem Header="TabItem" >
<view:PaneView1 />
</TabItem>
现在我有了另一个PaneView2。根据一个内部xaml的条件应显示如下
<TabItem Header="TabItem" >
<!-- Condition here - if (x == true)-->
<view:PaneView1 />
<!-- else -->
<view:PaneView2 />
</TabItem>
这可能吗?
答案 0 :(得分:1)
有几个解决方案,最简单的方法是使用DataTrigger
并根据您的条件设置内容
<TabControl>
<TabItem Header="TabItem" >
<TabItem.Style>
<Style TargetType="TabItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Condition}" Value="True">
<Setter Property="Content">
<Setter.Value>
<view:PaneView1 />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Condition}" Value="False">
<Setter Property="Content" >
<Setter.Value>
<view:PaneView2 />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TabItem.Style>
</TabItem>
</TabControl>
条件
private bool _condition = false;
public bool Condition
{
get
{
return _condition;
}
set
{
if (_condition == value)
{
return;
}
_condition = value;
OnPropertyChanged();
}
}
答案 1 :(得分:0)
使用触发器切换view:PaneView1
和view:PaneView2
之间的可见性:
<StackPanel>
<CheckBox x:Name="MyCheckBox" Content="Edit value"/>
<TabControl>
<TabItem Header="TabItem">
<TabItem.ContentTemplate>
<DataTemplate>
<Grid>
<TextBlock x:Name="MyTextBlock" Text="You can't edit me"/>
<TextBox x:Name="MyTextBox" Visibility="Collapsed" Text="You can edit me"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=MyCheckBox, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter TargetName="MyTextBlock" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="MyTextBox" Property="Visibility" Value="Visible"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
</TabControl>
</StackPanel>
您可以绑定到DataTrigger.Binding
中的任何值 - 来自UI或数据上下文(示例代码绑定到UI)。