我有一个子类的 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>