代码之家  ›  专栏  ›  技术社区  ›  RezaNoei

设置从现有属性WPF ControlTemplate获取的属性值

  •  0
  • RezaNoei  · 技术社区  · 7 年前

    我正在研究WPF控制模板。 我想说的是,每当鼠标悬停事件在我的按钮上触发时,它们的背景颜色都会变为边框笔刷颜色。

     <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>
    

    在下面的一行中,我试图从我的按钮上取下borderBrush。但我不能这样做:

     <!--<Setter TargetName="Border" Property="Background" Value="Border.BorderBrush"></Setter>-->
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   V.Leon    7 年前

    您可以创建 Binding 具有 RelativeSource 设置为 Border 它允许您绑定到 边境 自己的 BorderBrush 属性:

    <Setter TargetName="Border" Property="Background" Value="{Binding RelativeSource={RelativeSource Self}, Path=BorderBrush}" />
    
        2
  •  0
  •   R.A 1    7 年前

    我认为在触发器中设置参考值并非易事。 如果您使用颜色设置值,您设置背景的方式是否存在问题。

        <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>