这只是一个示例代码
在示例代码中,我有3个按钮。默认情况下,每个按钮的可见性都会折叠,鼠标悬停在相应的网格或边框中时,它将是可见的。
3个按钮的名称是
PowerButton有一个额外的触发器,当Button变为可见时,它会将Background
颜色变为 BlueViolet 。但默认的Background
颜色为 BurlyWood
此外,还有两个DataTrigger用于在PowerButton中设置Visibility。
如果StarButton获得Visibility Visible,那么PowerButton就会变成 可见的可见性
这里我的要求是我需要禁用背景颜色的DataTrigger,以便上述两个DataTrigger获得效果。结果应为默认颜色 BurlyWood 。
注意:不要在上述DataTrigger中添加任何条件来设置 背景颜色到BurlyWood。分享你的想法,如何绕过 DataTrigger。
我的示例WPF XAML源代码是
<Grid>
<Border x:Name="m_Border" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,20,0,0">
<Button x:Name="SupremeButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" >
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=m_Border, Path=IsMouseOver}" Value="false">
<Setter Property="Button.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Border>
<Grid x:Name="grid" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,60,0,0">
<Button x:Name="PowerButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Background="BurlyWood" Width="75" >
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=grid, Path=IsMouseOver}" Value="false">
<Setter Property="Button.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=PowerButton, Path=Visibility}" Value="Visible">
<Setter Property="Button.Background" Value="BlueViolet"></Setter>
</DataTrigger>
<!-- Visibilty is set by Outer Button -->
<DataTrigger Binding="{Binding ElementName=SupremeButton, Path=Visibility}" Value="Visible">
<Setter Property="Button.Visibility" Value="Visible"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=StarButton, Path=Visibility}" Value="Visible">
<Setter Property="Button.Visibility" Value="Visible"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
<Border x:Name="n_Border" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,100,0,0">
<Button x:Name="StarButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" >
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=n_Border, Path=IsMouseOver}" Value="false">
<Setter Property="Button.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Border>
</Grid>
答案 0 :(得分:0)
我希望我明白你需要什么。当鼠标在PowerButton上时,它将显示BlueViolet背景。当鼠标位于另外两个按钮之一时,PowerButton将显示BurlyWood背景。
这是修改后的“PowerButton”XAML: -
<Button x:Name="PowerButton" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" >
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="BlueViolet" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=grid, Path=IsMouseOver}" Value="false">
<Setter Property="Button.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
<!-- Visibilty is set by Outer Button -->
<DataTrigger Binding="{Binding ElementName=SupremeButton, Path=Visibility}" Value="Visible">
<Setter Property="Button.Visibility" Value="Visible"></Setter>
<Setter Property="Background" Value="BurlyWood" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=StarButton, Path=Visibility}" Value="Visible">
<Setter Property="Button.Visibility" Value="Visible"></Setter>
<Setter Property="Background" Value="BurlyWood" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
问题在于Background
元素中的<Button>
属性,我删除了该属性。 (控件的XAML中的属性值会覆盖样式和触发器中设置的任何值,因此PowerButton始终是BurlyWood)。
在我的版本中,我现在在<Style>
部分内将按钮背景设置为BlueViolet。使用样式<Setter>
(而不是<Button>
XAML)设置默认值允许触发器覆盖该值。我还删除了触发器以将背景更改为BlueViolet,因为这现在是多余的。
其余触发器保持不变。当鼠标悬停在其他两个按钮之一时,这些会将背景更改为BurlyWood。