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

时间:2021-03-11 01:41:12

标签: wpf triggers controltemplate

我有一个子类的 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,0"/>
            <controls:ResizeThumb Width="1" Margin="-1,0,0,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>

0 个答案:

没有答案