WPF - 如何从嵌套模板化控件的触发器设置控件的依赖属性

问题描述

我有一个子类的 ContentControl (MySpecialContentControl) 并向其中添加一个名为“mySpecialDP”的 DP。 在此控件的样式模板中,模板化的“ResizeDecorator”(也是子类控件)中还有一些其他控件,如下所示:

 "Local": {
    "Authority": "https://accounts.google.com/","ClientId": "4....apps.googleusercontent.com","PostlogoutRedirectUri": "https://localhost:44380/authentication/logout-callback","RedirectUri": "https://localhost:44380/authentication/login-callback","ResponseType": "id_token token"
  }

我试图找到一种方法来从模板化控件 (ResizeDecoratorTemplate) 的 IsMouSEOver 触发器中设置“mySpecialDP”属性。 ResizeDecoratorTemplate 可以知道他的“模板父级”(controls:MySpecialContentControl) 吗?

这样做的原因是内容控件是 Canvas 的一部分,如果用户单击 Canvas 内的某处,或者特别是在 ResizeThumb 控件上,我需要知道调用 MouseLeftButtonDown 或 MouseMove 时。我的想法是使用枚举来区分。

    <ControlTemplate x:Key="ResizeDecoratorTemplate" targettype="{x:Type Control}">
        <Grid>
            <controls:ResizeThumb Height="1" Margin="0,-1,0"/>
            <controls:ResizeThumb Width="1" Margin="-1,0"/>
        </Grid>

        <ControlTemplate.Triggers>
            <Trigger Property="IsMouSEOver" Value="True">
                <Setter Property="mySpecialDP" Value="X"/>
            </Trigger>
        </ControlTemplate.Triggers>
        
    </ControlTemplate>

    <Style x:Key="ControlStyle" targettype="{x:Type controls:MySpecialContentControl}">
        <Setter Property="mySpecialDP" Value="Y"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate targettype="{x:Type controls:MySpecialContentControl}">
                    <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
                        <Control x:Name="ResizeDecorator" Template="{StaticResource ResizeDecoratorTemplate}" Visibility="Collapsed"/>
                        <ContentPresenter Content="{TemplateBinding ContentControl.Content}"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Selector.IsSelected" Value="True">
                            <Setter TargetName="ResizeDecorator" Property="Visibility" Value="Visible"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)