我试图根据ListBoxItem内容的IsEnabled属性禁用ListBox项目。像此代码中的按钮1具有IsEnabled = False,但列表框项目是可选的。如果内容IsEnabled属性为false,我想禁用选择。如何触发搜索项目内容及其IsEnabled属性。

<Grid>
      <ListBox>
         <ListBox.ItemTemplate>
            <DataTemplate>
               <DataTemplate.Triggers>
                  <Trigger Property="IsEnabled"  Value="False">
                     <Setter Property="IsEnabled" Value="False"/>
                  </Trigger>
               </DataTemplate.Triggers>
            </DataTemplate>
         </ListBox.ItemTemplate>
         <ListBoxItem>
            <Button IsEnabled="False">1</Button>
         </ListBoxItem>
         <ListBoxItem>
            <Button>2</Button>
         </ListBoxItem>
         <ListBoxItem>
            <Button>3</Button>
         </ListBoxItem>
      </ListBox>
</Grid>

最佳答案

为什么不只是在您的IsEnabled上设置ListBoxItem?它也应该禁用Button

但这就是说,您可以使用Button.IsEnabled绑定将ListBoxItem.IsEnabled绑定到RelativeSource,并设置IsEnabledListBoxItem属性,而不是Button

<Button IsEnabled="{Binding IsEnabled,
    RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}" />


如果您使用WPF,强烈建议您研究MVVM设计模式。它非常适合WPF,使用它可以将ListBoxItem.IsEnabledButton.IsEnabled绑定到DataContext中的相同属性。

关于c# - 如何在ListBoxItem中为触发器找到子控件的IsEnabled属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9801559/

10-11 17:03