Dot-Net

DataTrigger 使 WPF 按鈕處於非活動狀態,直到 TextBox 具有值

  • September 8, 2015

我希望Button控制項的屬性是IsEnabled="False"直到一個值輸入TextBoxWindow.

到目前為止的程式碼:

<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”屬性並在那里處理所有展示邏輯,而不是在視圖本身中處理。

更新

從評論可以看出,我錯誤地將其設置為Buttonany TextBox有值時啟用,但要求是在所有es 有值Button時啟用。 TextBox

從概念上講,您所要做的就是反轉條件——而不是“如果所有條件都為假,則為假”,我們想要“如果所有條件都為真,則為真”。

問題是在 XAML 中沒有辦法說“not null”——也就是說,沒有 就沒有辦法IValueConverter。我會創建一個NullToBoolConverter返回falsefornulltruefor != 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>

引用自:https://stackoverflow.com/questions/4662349