簡體   English   中英

在Xaml中處理樣式標簽中的事件

[英]Handling Events In Style Tag in Xaml

我在xaml的Style標記內使用EventSetter並處理MouseEnter事件。 但是問題在於,鼠標進入事件僅顯示了片刻,然后消失了……為什么?為什么不持久?

這是我在其中定義樣式的xaml文件

<Style x:Key="MouseOverHighlightStyle">
    <EventSetter Event="Button.MouseEnter" Handler="element_MouseEnter" />
    <Setter Property="Button.Padding" Value="5"/>
</Style>

這是我處理事件的.cs文件

namespace testing2
{
   partial class  stt
    {
    private void element_MouseEnter(object sender, MouseEventArgs e)
    {

        ((Button)sender).Background =
        new SolidColorBrush(Colors.LightGoldenrodYellow);
    }

}

您看到的行為是因為在按鈕的默認模板中, IsMouseOver屬性上有一個觸發器,其中顯式顏色設置為值#FFBEE6FD

具體來說,觸發器是這樣的:

<Trigger Property="UIElement.IsMouseOver" Value="True">
   <Setter Property="Panel.Background" TargetName="border">
      <Setter.Value>
         <SolidColorBrush>#FFBEE6FD</SolidColorBrush>
       </Setter.Value>
   </Setter>
   <Setter Property="Border.BorderBrush" TargetName="border">
     <Setter.Value>
        <SolidColorBrush>#FF3C7FB1</SolidColorBrush>
     </Setter.Value>
   </Setter>
</Trigger>

但是不幸的是,如果您必須更改該觸發器中的值,則必須覆蓋按鈕的整個ControlTemplate。

對於您的情況,將如下所示(顏色為LightGoldenrodYellow ):

<Button>
  <Button.Template>
    <ControlTemplate TargetType="ButtonBase">
       <Border BorderThickness="{TemplateBinding Border.BorderThickness}"
               BorderBrush="{TemplateBinding Border.BorderBrush}"
               Background="{TemplateBinding Panel.Background}"
               Name="border"
               SnapsToDevicePixels="True">
          <ContentPresenter RecognizesAccessKey="True"
                            Content="{TemplateBinding ContentControl.Content}"
                            ContentTemplate="{TemplateBinding 
                                              ContentControl.ContentTemplate}"
                            ContentStringFormat="{TemplateBinding 
                                          ContentControl.ContentStringFormat}"
                            Name="contentPresenter"
                            Margin="{TemplateBinding Control.Padding}"
                            HorizontalAlignment="{TemplateBinding 
                                          Control.HorizontalContentAlignment}"
                            VerticalAlignment="{TemplateBinding 
                                            Control.VerticalContentAlignment}"
                            SnapsToDevicePixels="{TemplateBinding
                                               UIElement.SnapsToDevicePixels}"
                            Focusable="False" />
       </Border>
       <ControlTemplate.Triggers>
         <Trigger Property="Button.IsDefaulted" Value="True">
           <Setter Property="Border.BorderBrush" TargetName="border">
             <Setter.Value>
              <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}"/>
             </Setter.Value>
           </Setter>
          </Trigger>
          <Trigger Property="UIElement.IsMouseOver" Value="True">
            <Setter Property="Panel.Background" TargetName="border">
              <Setter.Value>
                <SolidColorBrush Color="LightGoldenrodYellow"/>
              </Setter.Value>
            </Setter>
            <Setter Property="Border.BorderBrush" TargetName="border">
              <Setter.Value>
                <SolidColorBrush>#FF3C7FB1</SolidColorBrush>
              </Setter.Value>
            </Setter>
           </Trigger>
           <Trigger Property="ButtonBase.IsPressed" Value="True">
              <Setter Property="Panel.Background" TargetName="border">
               <Setter.Value>
                 <SolidColorBrush>#FFC4E5F6</SolidColorBrush>
               </Setter.Value>
              </Setter>
              <Setter Property="Border.BorderBrush" TargetName="border">
                <Setter.Value>
                  <SolidColorBrush>#FF2C628B</SolidColorBrush>
                </Setter.Value>
              </Setter>
            </Trigger>
            <Trigger Property="ToggleButton.IsChecked" Value="True">
              <Setter Property="Panel.Background" TargetName="border">
                <Setter.Value>
                  <SolidColorBrush>#FFBCDDEE</SolidColorBrush>
                </Setter.Value>
              </Setter>
              <Setter Property="Border.BorderBrush" TargetName="border">
               <Setter.Value>
                <SolidColorBrush>#FF245A83</SolidColorBrush>
               </Setter.Value>
              </Setter>
             </Trigger>
             <Trigger Property="UIElement.IsEnabled" Value="False">
               <Setter Property="Panel.Background" TargetName="border">
                <Setter.Value>
                  <SolidColorBrush>#FFF4F4F4</SolidColorBrush>
                </Setter.Value>
               </Setter>
               <Setter Property="Border.BorderBrush" TargetName="border">
                 <Setter.Value>
                  <SolidColorBrush>#FFADB2B5</SolidColorBrush>
                 </Setter.Value>
               </Setter>
              <Setter Property="TextElement.Foreground"
                      TargetName="contentPresenter">
                <Setter.Value>
                  <SolidColorBrush>#FF838383</SolidColorBrush>
                </Setter.Value>
               </Setter>
             </Trigger>
           </ControlTemplate.Triggers>
         </ControlTemplate>
    </Button.Template>
 </Button>

暫無
暫無

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

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