隐藏复选框,但显示其内容

时间:2015-10-09 11:09:17

标签: c# wpf xaml checkbox listbox

是否可以隐藏复选框,但保持其内容可见?

<ListBox  
         ItemsSource ="{Binding MyItemCollection}"     
         SelectionMode="Single" 
         Width="300"
         Height="320">
      <ListBox.ItemTemplate>
          <DataTemplate>
             <CheckBox IsChecked="{Binding IsChecked}">
                   <CheckBox.Content>
                       <TextBlock Text="{Binding Item.Code}"/>
                   </CheckBox.Content>
             </CheckBox>
          </DataTemplate>
      </ListBox.ItemTemplate>
</ListBox>
<StackPanel>
   <CheckBox Content="Edit Mode" 
             IsChecked="{Binding Path=EditModeSelected, Mode=TwoWay}">
   </CheckBox>
</StackPanel>

我想在关闭编辑模式时隐藏列表框中的复选框(因此它应绑定到EditModeSelected),但文本应保持可见。

2 个答案:

答案 0 :(得分:1)

我想到了3种可能的解决方案 - 其中两种或多或少是“黑客”,一种或多或少的清洁解决方案:

  1. 每个项目的复选框和文本块 - 您可能会遇到边距等问题
  2. 没有内容的复选框(仅在编辑模式下可见)和始终可见的文本块
  3. 使用默认的controltemplate复选框(Default ControlTemplate for CheckBox)并绑定复选框的可见性

答案 1 :(得分:0)

为此,您可以保留两个TextBlock。在编辑模式下,可见CheckBox并隐藏TextBlock,而在读取器模式中则相反。我希望这可能有所帮助。由于DataTemplate在这里只有一个孩子,因此修复

创建如下所示的窗口资源。创建了两个数据模板,一个用于编辑模式,另一个用于读者模式。

<Window.Resources>
    <DataTemplate x:Key="EditModeTemplate">
        <CheckBox IsChecked="{Binding IsChecked}">
            <CheckBox.Content>
                <TextBlock Text="{Binding Item.Code}"/>
            </CheckBox.Content>
        </CheckBox>
    </DataTemplate>
    <DataTemplate x:Key="ReaderModeTemplate">
        <TextBlock Text="{Binding Item.Code}"/>
    </DataTemplate>
</Window.Resources>

现在在.cs文件中根据要求分配日期模板。

if (EditMode)
{
    DemoCollection.ItemTemplate = this.Resources["EditModeTemplate"] as DataTemplate;
}
else
{
    DemoCollection.ItemTemplate = this.Resources["ReaderModeTemplate"] as DataTemplate;
}