Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取WPF中的子属性?_C#_Wpf_Xaml - Fatal编程技术网

C# 如何获取WPF中的子属性?

C# 如何获取WPF中的子属性?,c#,wpf,xaml,C#,Wpf,Xaml,我想写一个触发器,当鼠标移到按钮上时,它会改变属性“Offset”。当我这样尝试时: <ControlTemplate x:Key="Button"> <Grid x:Name="button"> <Rectangle x:Name="ButtonTheme" RadiusX="10" RadiusY="10" Stroke="Silver" StrokeThickness="3" Fill="{Templa

我想写一个触发器,当鼠标移到按钮上时,它会改变属性“Offset”。当我这样尝试时:

 <ControlTemplate x:Key="Button">
            <Grid x:Name="button">
                <Rectangle x:Name="ButtonTheme" RadiusX="10" RadiusY="10" Stroke="Silver" StrokeThickness="3" Fill="{TemplateBinding Background}"></Rectangle>
                <Rectangle x:Name="HighLight" Opacity="1.0">
                    <Rectangle.Fill>
                        <RadialGradientBrush Center="0.5,0.8">
                            <GradientStop x:Name="Flower" Color="#AAFFFFFF" Offset="1" />
                            <GradientStop Color="#00FFFFFF" Offset="0" />
                        </RadialGradientBrush>
                    </Rectangle.Fill>
                </Rectangle>
                <ContentControl HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Content= "{TemplateBinding Property = ContentControl.Content}" />
                 </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="Button.IsMouseOver" Value="True">
                    <Setter TargetName="Flower" Property="Offset" Value="1" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate> 


它返回“在可视化树中找不到名为“Flower”的子级”。有没有办法更改该属性?

错误清楚地说明了问题所在。
GradientStop
不是可视树的一部分,它不是可视树。我认为这是XAML中的某种限制,最好是轻松地完成您所做的事情

为了坚持使用您现在的代码,我们只能使用一种黑客解决方案,将GradientStop的
偏移量
绑定到某个已知元素的属性。(known元素在这里意味着可以通过
Setter
TargetName
集访问它)。我认为这里唯一适合的属性是
标记
属性。然后可以使用
Setter
来设置已知元素的标记属性。以下是遵循该想法的代码:

<ControlTemplate x:Key="Button">
        <Grid x:Name="button">                
            <Rectangle x:Name="ButtonTheme" RadiusX="10" RadiusY="10" Stroke="Silver" StrokeThickness="3" Fill="{TemplateBinding Background}"></Rectangle>
            <Rectangle x:Name="HighLight" Opacity="1.0" Tag="1">
                <Rectangle.Resources>
                   <DiscreteObjectKeyFrame x:Key="proxy" Value="{Binding ElementName=HighLight}"/>
                </Rectangle.Resources>
                <Rectangle.Fill>
                    <RadialGradientBrush Center="0.5,0.8">
                        <GradientStop x:Name="Flower" Color="#AAFFFFFF" 
                                      Offset="{Binding Value.Tag, Source={StaticResource proxy}}" />
                        <GradientStop Color="#00FFFFFF" Offset="0" />
                    </RadialGradientBrush>
                </Rectangle.Fill>
            </Rectangle>
            <ContentControl HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            Content= "{TemplateBinding Property = ContentControl.Content}" />
             </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="HighLight" Property="Tag" Value="0" />
            </Trigger>
        </ControlTemplate.Triggers>
 </ControlTemplate>
您可以在双动画中使用路径
Fill.GradientStops[0].Offset
,目标是
高亮显示
,因此在鼠标悬停时,了解要更改其偏移量的GradientStop的索引非常重要

<ControlTemplate x:Key="Button">
    <Grid x:Name="button">                
        <Rectangle x:Name="ButtonTheme" RadiusX="10" RadiusY="10" Stroke="Silver" StrokeThickness="3" Fill="{TemplateBinding Background}"></Rectangle>
        <Rectangle x:Name="HighLight" Opacity="1.0" Tag="1">               
            <Rectangle.Fill>
                <RadialGradientBrush Center="0.5,0.8">
                    <GradientStop x:Name="Flower" Color="#AAFFFFFF" 
                                  Offset="1" />
                    <GradientStop Color="#00FFFFFF" Offset="0" />
                </RadialGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
        <ContentControl HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Content= "{TemplateBinding Property = ContentControl.Content}" />
         <VisualStateManager.VisualStateGroups>
             <VisualStateGroup Name="CommonStates">
                <VisualState Name="Normal"/>
                <VisualState Name="MouseOver">
                   <Storyboard>
                     <DoubleAnimation Storyboard.TargetName="HighLight" Storyboard.TargetProperty="Fill.GradientStops[0].Offset" 
                    To="0" Duration="0"/>
                   </Storyboard>
                </VisualState>
             </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
    </Grid>        
</ControlTemplate>