簡體   English   中英

設置從現有屬性WPF ControlTemplate獲取的屬性值

[英]Set a property value took from existing property WPF ControlTemplate

我正在使用WPF ControlTemplates。 我想說的是,每當在我的Button上觸發mouserover事件時,它們的背景顏色就會變為borderBrush顏色。

 <Style TargetType="Button">
     <Setter Property="Cursor" Value="Hand"/>
     <Setter Property="Background" Value="White"/>
     <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="Button">
                 <Grid>
                     <Border x:Name="Border" CornerRadius="6" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                         <TextBlock x:Name="ContentBlock" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}" VerticalAlignment="Center"  HorizontalAlignment="Center"></TextBlock>
                     </Border>
                 </Grid>
                 <ControlTemplate.Triggers>
                     <Trigger Property="IsEnabled" Value="false">
                         <Setter TargetName="Border" Property="BorderBrush" Value="Gray"></Setter>
                         <Setter TargetName="ContentBlock" Property="Foreground"  Value="Gray"></Setter>
                     </Trigger>
                     <Trigger Property="IsMouseOver" Value="true">
                         <!--<Setter TargetName="Border" Property="Background" Value="Border.BorderBrush"></Setter>-->
                     </Trigger>
                 </ControlTemplate.Triggers>
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>

在下面的行中,我嘗試從Button中獲取borderBrush。 但我不能這樣:

 <!--<Setter TargetName="Border" Property="Background" Value="Border.BorderBrush"></Setter>-->

您可以使用將RelativeSource設置為Border本身來創建Binding ,這允許您綁定到Border自己的BorderBrush屬性:

<Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=BorderBrush}" />

我認為在觸發器中設置參考值並非易事。 如果您使用背景設置顏色的方式設置值是否會出現問題?

    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter TargetName="Border" 
     Property="BorderBrush" Value="Gray"></Setter>
                            <Setter TargetName="ContentBlock" 
    Property="Foreground"  Value="Gray"></Setter>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter TargetName="Border" 
    Property="Background" Value="Gray" />
                        </Trigger>
                    </ControlTemplate.Triggers>

暫無
暫無

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

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