Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐藏复选框,但显示其内容_C#_Wpf_Xaml_Checkbox_Listbox - Fatal编程技术网

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

C# 隐藏复选框,但显示其内容,c#,wpf,xaml,checkbox,listbox,C#,Wpf,Xaml,Checkbox,Listbox,是否可以隐藏复选框,但保持其内容可见 <ListBox ItemsSource ="{Binding MyItemCollection}" SelectionMode="Single" Width="300" Height="320"> <ListBox.ItemTemplate> <DataTemplate> &l

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

<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),但文本应该保持可见。

为此,可以保留两个文本块。在编辑模式下,复选框可见,隐藏文本块;在读卡器模式下,反之亦然。我希望这能有所帮助。由于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>

我想到了3种可能的解决方案——其中两种或多或少是“黑客”,另一种或多或少是干净的解决方案:

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

  • Mukesh Kumar,谢谢,但这会导致错误“对象‘DataTemplate’已经有一个子对象,无法添加‘TextBlock’。‘DataTemplate’只能接受一个子对象。”DataTemplate实际上只能有一个子对象。要修复此问题,请将复选框和文本块水平包裹stackpanel@Dzhara,我只是想给你一个想法。现在我已经更新了代码。请看一下,如果有帮助请告诉我。
    if (EditMode)
    {
        DemoCollection.ItemTemplate = this.Resources["EditModeTemplate"] as DataTemplate;
    }
    else
    {
        DemoCollection.ItemTemplate = this.Resources["ReaderModeTemplate"] as DataTemplate;
    }