2016-01-04 54 views
1

我有一個DataTemplateButton控制我ListBoxItemTextBlock裏面裏面按鈕控制的TextBlock的Text屬性的變化IsEnabled屬性:WPF裏面放置的按鈕控制

<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> 
.... 

現在,當用戶點擊Button,我想將按鈕的IsEnabled屬性更改爲False,將TextBlockText更改爲「Clicked」。谷歌搜索了一段時間後,我修改了它:

.... 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding ElementName=nxBut, Path=IsPressed}" Value="True"> 
      <Setter TargetName="nxBut" Property="IsEnabled" Value="False" /> 
      <Setter TargetName="nxBut_Txt" Property="Text" Value="Clicked"/> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

但它不起作用。我究竟做錯了什麼?

+1

我會換你的按鈕爲ToggleButton,並將你的isenabled綁定到梗死,你並不真的需要在那裏看起來像TextBlock。 –

+0

@Chris如果我用Tooglebutton改變它,這是否意味着如果我再次點擊它,該按鈕將再次啓用?如果是這樣,那麼我不想要它:/ – Wahyu

+1

除非你手動恢復IsEnabled上的布爾值。它會像''所以一旦它被點擊,就是這樣,它被禁用,直到它以某種方式手動復位或屏幕重新渲染等。不確定你的要求,但如果需要保持持久性,你可以保存布爾值。你的反轉布爾轉換器就會使它如此IF IFChecked = True,那麼IsEnabled = False –

回答

1

所以像討論一樣。如果我們只是將Button換成ToggleButton並將其綁定到IsEnabledIsChecked本身。然後在按下之後,它會自行禁用,直到通過其他方式手動重置爲止。就像是;

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

在基於IsChecked的IsEnabled屬性中,使用倒置布爾轉換器將True換成False,反之亦然。因爲一旦你點擊一次,它現在被禁用,用戶將無法取消選中ToggleButton。希望這可以幫助。

+0

你說可以保存布爾值,怎麼樣? – Wahyu

+0

另一個快速谷歌搜索類似於「保存設置」或「保存值」爲wpf的應該給你一些關於如何做Blah.Save()的教程,並向你展示一些最佳實踐。 :) –

+0

哦,當然,如果遇到實施它的具體問題,請在這裏單獨提問。許多人準備幫助! –