C# 如果codebehind具有值,则激活按钮
我想不出来。我有一个按钮,我想禁用,直到代码后面的两个字符串得到一个值。它们最初设置为null 这是我目前的按钮样式xaml:C# 如果codebehind具有值,则激活按钮,c#,wpf,C#,Wpf,我想不出来。我有一个按钮,我想禁用,直到代码后面的两个字符串得到一个值。它们最初设置为null 这是我目前的按钮样式xaml: <Style TargetType="Button"> <Setter Property="Background" Value="#FF2B2B2B" /> <Setter Property="BorderBrush" Value="#FF4B4B4B" /> &
<Style TargetType="Button">
<Setter Property="Background" Value="#FF2B2B2B" />
<Setter Property="BorderBrush" Value="#FF4B4B4B" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="25" />
<Setter Property="Width" Value="Auto" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="Button">
<Rectangle x:Name="innerRectangle"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Fill="{TemplateBinding Background}" />
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Content"
TextBlock.FontSize="15"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#3f3f41" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#007acc" />
</Trigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=saveFolder}" Value="" />
<Condition Binding="{Binding Source=saveFolder, Path=IsChecked}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Green" />
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
和按钮,它的自我:
<Button Name="btnGo" Content="Go!" HorizontalAlignment="Center" Click="btnGo_Click" />
您可以通过在setter中将按钮设置为enabled(已启用),并使用
DataTrigger
s(如果其中一个属性为null)将其设置为disabled(已禁用)来控制此操作:
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True" />
<!-- Other stuff in style unchanged -->
<Style.Triggers>
<DataTrigger Binding="{Binding SomeProperty1}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding SomeProperty2}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
我在样式上使用触发器集合而不是控件模板,因为我通常倾向于避免使用后者,除非我需要处理控件模板本身中定义的元素
正如BradleyDotNET在评论中指出的那样,设置命令并使用
CanExecute
也是一个很好的解决方案。如果按钮的DataContext是一个实现某种形式的属性更改事件的类,那么还有另一种方法可以做到这一点
在按钮的DataContext中,为绑定到的按钮创建一个新的bool属性,例如
public bool CanClickButton
{
get
{
return !String.IsNullOrWhiteSpace(firstString)
&& !String.IsNullOrWhiteSpace(secondString);
}
}
然后只需将CanClickButton
的RaisePropertyChanged
方法添加到这两个字符串属性的设置器中,并将按钮的IsEnabled绑定到CanClickButton
我喜欢这样做,因为我还没有学会如何实现命令。不过,对于更大的项目,我认为命令是一种更好的方式。我看不到触发器设置
IsEnabled
。或者,您可以使用命令代替单击
,并利用CanExecute
。