根据条件显示tabitem内容

时间:2015-09-08 10:24:09

标签: c# wpf xaml

我想根据属性显示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>

这可能吗?

2 个答案:

答案 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:PaneView1view: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)。