wpf Change IsEnabled属性的按钮控件和文本属性的文本块内放置的按钮控件

wpf Change IsEnabled属性的按钮控件和文本属性的文本块内放置的按钮控件,wpf,xaml,triggers,Wpf,Xaml,Triggers,我的ListBoxItem在DataTemplate中有一个按钮控件,里面有一个TextBlock: <DataTemplate x:Key="SomeitemTempate"> .... <Button x:Name="nxBut" Margin="20,0,20,20" Height="30" DockPanel.Dock="Bottom" FontSize="16" Background="White" Click="nxBut_Click"> <T

我的
ListBoxItem
DataTemplate
中有一个
按钮
控件,里面有一个
TextBlock

<DataTemplate x:Key="SomeitemTempate">
....
<Button x:Name="nxBut" Margin="20,0,20,20" Height="30" DockPanel.Dock="Bottom" FontSize="16" Background="White" Click="nxBut_Click">
     <TextBlock x:Name="nxBut_Txt" Text="Some Button" FontWeight="Bold" Foreground="#FF11700C"/>
</Button>
....

但它不起作用。我做错了什么?

就像我们讨论的那样。如果我们只是将
按钮
交换为
切换按钮
,并绑定到
上,则会选中
本身。然后按下按钮,它将自动禁用,直到通过其他方式手动重置。有点像

<ToggleButton IsEnabled="{Binding IsChecked, 
                                  RelativeSource={RelativeSource Self},
                                  Converter="{StaticResource InvertedBoolConverter"}}"/>


在基于IsChecked的IsEnabled属性上,使用反向布尔转换器将True替换为False,反之亦然。因为一旦你点击它一次,它现在就被禁用了,用户无论如何都不能取消选中ToggleButton。希望这有帮助

我会将您的按钮替换为ToggleButton,并将您的isenabled绑定到ischecked,而您实际上并不需要其中的TextBlock,它看起来是这样的。@Chris如果我用Tooglebutton更改它,是否意味着如果我再次单击它,按钮将再次启用?如果是这样,那么我不想要它:/Not,除非您在IsEnabled上手动还原bool。它可能类似于
,所以一旦单击它,它就会被禁用,直到它以某种方式被重置,无论是手动重置还是屏幕重新渲染或其他。不确定您的需求,但如果需要保持持久性,您可以保存bool。如果IsChecked=True,则其上的反向布尔变换器将使其成为如此,然后IsEnabled=False@ChrisW. 我还不熟悉转换器的东西。我写了“如果((bool)value==true){return false;}return true;”当我点击按钮时,出现了一个错误:(给“wpf反向布尔转换器”一个快速谷歌,有很多教程。)你说可以保存布尔值,怎么保存?另一个类似“保存设置”或“保存值”的快速谷歌搜索for wpf应该提供一些关于如何执行类似Blah.Save()的操作的教程,并向您展示一些最佳实践。:)哦,当然,如果你在实现它的过程中遇到了具体的问题,就在这里问一个单独的问题。很多人都愿意帮忙!是的,我想我会那样做,但不是现在。我先自己试试:)
<ToggleButton IsEnabled="{Binding IsChecked, 
                                  RelativeSource={RelativeSource Self},
                                  Converter="{StaticResource InvertedBoolConverter"}}"/>