簡體   English   中英

更改 wpf 按鈕后 IsMouseOver 觸發顏色不起作用

[英]After change wpf button IsMouseOver trigger color not work

這是我的按鈕代碼

 public class MetroButton : Button
{
    public static readonly DependencyProperty MoseOverBrushProperty;
    public static readonly DependencyProperty PressedBrushProperty;

    public MetroButton():base()
    {

        var resource = new ResourceDictionary
        {
            Source = new Uri("/Parking.Component.Ui;component/Styles/ButtonMetro.xaml",
                     UriKind.RelativeOrAbsolute)
        };
        Style = resource["ButtonMetro"] as Style;
        //SetResourceReference(StyleProperty, Style);
    }
    static MetroButton()
    {

        MoseOverBrushProperty = DependencyProperty.Register("MoseOverBrush", typeof(Brush), typeof(MetroButton));
        PressedBrushProperty = DependencyProperty.Register("PressedBrush", typeof(Brush), typeof(MetroButton));
    }


    public Brush MoseOverBrush
    {
        get { return (Brush)base.GetValue(MoseOverBrushProperty); }
        set { base.SetValue(MoseOverBrushProperty, value); }            
    }
    public Brush PressedBrush
    {
        get { return (Brush)base.GetValue(PressedBrushProperty); }
        set { base.SetValue(PressedBrushProperty, value); }
    }

}

我的按鈕使用這種樣式

<Style   x:Key="ButtonMetro" TargetType="{ x:Type LochalUI:MetroButton}">
    <Setter Property="Foreground" Value="White" />
    <Setter Property="MoseOverBrush" Value="#FF3F62FD"/>
    <Setter Property="PressedBrush" Value="#FF000099"/>
    <Setter Property="Background" Value="#FF6B9AFF"/>
    <Setter Property="FontSize" Value="15" />
    <Setter Property="FontFamily" Value="B Yekan" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type LochalUI:MetroButton}">
                <Border x:Name="border" CornerRadius="4" Background="{TemplateBinding Background}">
                    <Grid>
                        <ContentPresenter x:Name="MyContentPresenter" Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,0,0,0" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="{Binding Path=MoseOverBrush , RelativeSource={RelativeSource Self}}" />
                        <Setter Property="Foreground" Value="Black" />

                    </Trigger>

                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" Value="{Binding Path=PressedBrush , RelativeSource={RelativeSource Self}}" />
                        <Setter Property="Foreground" Value="White" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

但是當我為按鈕背景添加顏色時,問題就出現了,如下代碼所示:

 <UI:MetroButton HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="132" Height="107" Background="#FF09CD00"  >
        <Grid>
            <Label Content="تنظیمات" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="5,5,5,12" Foreground="White" Margin="5"/>
        </Grid>
    </UI:MetroButton>

IsMouseOver 轉換器顏色和 IsPressed 觸發器不起作用。

(我不想在我的 setter 中使用靜態資源)更改其他屬性沒有效果,只是更改背景會導致這個問題。

我發現答案問題在 2 個地方:

當我們使用觸發器時的第一個

 <ControlTemplate.Triggers/>

您確定在當前對象上設置了 setter set 屬性

而第二個是在我們有變化的綁定中

Value="{Binding Path=MoseOverBrush , RelativeSource={RelativeSource Self}}"

Value="{Binding Path=MoseOverBrush , RelativeSource={RelativeSource TemplatedParent}}" 

因為MoseOverBrush是父屬性而不是 ControlTemplate 屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM