Dot-Net
DataTrigger 使 WPF 按鈕處於非活動狀態,直到 TextBox 具有值
我希望
Button控制項的屬性是IsEnabled="False"直到一個值輸入TextBox到Window.到目前為止的程式碼:
<Button Content="Click Me" Name="ClickMe" VerticalAlignment="Top" Click="ClickMe_Click"> <Button.Style> <Style> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=textBox, Path=Length}" <!-- or even: Binding="{Binding Path=textBox.Length}" --> Value="0"> <Setter Property="Button.IsEnabled" Value="false" /> </DataTrigger> </Style.Triggers> </Style> </Button.Style> </Button>另外,是否可以讓這個
Button控制項的IsEnabled屬性基於 3 個不同的TextBox控制項,它們都有值?
假設您使用的是展示模型,例如 ViewModel,您應該直接綁定數據而不是 UI 元素。
<Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding FirstName}" Value="{x:Null}" /> <Condition Binding="{Binding MiddleName}" Value="{x:Null}" /> <Condition Binding="{Binding LastName}" Value="{x:Null}" /> </MultiDataTrigger.Conditions> <Setter Property="Button.IsEnabled" Value="False" /> </MultiDataTrigger> </Style.Triggers>也就是說,如果您使用的是展示模型,則始終可以添加
bool“EnableSave”屬性並在那里處理所有展示邏輯,而不是在視圖本身中處理。更新
從評論可以看出,我錯誤地將其設置為
Button在anyTextBox有值時啟用,但要求是在所有es 有值Button時啟用。TextBox從概念上講,您所要做的就是反轉條件——而不是“如果所有條件都為假,則為假”,我們想要“如果所有條件都為真,則為真”。
問題是在 XAML 中沒有辦法說“not null”——也就是說,沒有 就沒有辦法
IValueConverter。我會創建一個NullToBoolConverter返回falsefornull和truefor!= null。給定這樣的轉換器:
<Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding FirstName, Converter={StaticResource NullToBoolConverter}}" Value="True" /> <Condition Binding="{Binding MiddleName, Converter={StaticResource NullToBoolConverter}}" Value="True" /> <Condition Binding="{Binding LastName, Converter={StaticResource NullToBoolConverter}}" Value="True" /> </MultiDataTrigger.Conditions> <Setter Property="Button.IsEnabled" Value="True" /> </MultiDataTrigger> </Style.Triggers>