在我的自定义 RibbonScreenTip 类中,我必须将事件处理为 ToolTip.Opened。
public class CustomToolTip : ToolTip
{
public RibbonScreenTip ()
{
DefaultStyleKey = typeof(RibbonScreenTip);
this.Opened += CustomToolTip_Opened;
}
private void RibbonScreenTip _Opened(object sender, object e)
{
FrameworkElement parent = this.PlacementTarget as FrameworkElement;
if (parent != null)
{
}
}
}
我为我的自定义控件工具提示类编写了一个单独的样式。
在我的 MainWindow.xaml 中:
<ribbon:RibbonGroup Header="Font">
<ribbon:RibbonButton >
<ToolTipService.ToolTip>
<ribbon:RibbonScreenTip Title="Button" Placement="Top" Description="used to control process"/>
</ToolTipService.ToolTip>
</ribbon:RibbonButton>
</ribbon:RibbonGroup>
我试图在我的 RibbonScreenTip 类打开事件中获得父级:
FrameworkElement parent = this. PlacementTarget as FrameworkElement;
DependencyObject parent = VisualTreeHelper.GetParent(this);
我已将 RibbonScreenTip 附加到 RibbonButton。但是,RibbonScreenTip.Parent 仍显示为 null。请帮助我。
我首先尝试了以下步骤。它工作正常。 但是,我必须为每个按钮单独做。
namespace ToolTipTests;
public class CustomToolTip : ToolTip
{
public static readonly DependencyProperty SourceProperty =
DependencyProperty.Register(
nameof(Source),
typeof(FrameworkElement),
typeof(CustomToolTip),
new PropertyMetadata(default));
public CustomToolTip()
{
this.Opened += CustomToolTip_Opened;
}
public FrameworkElement Source
{
get => (FrameworkElement)GetValue(SourceProperty);
set => SetValue(SourceProperty, value);
}
private void CustomToolTip_Opened(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
if (this.Source is FrameworkElement parent)
{
// Do something here...
}
}
}
我的 MainWindow.xaml 喜欢:
<Button
x:Name="ButtonControl"
Content="Click">
<ToolTipService.ToolTip>
<local:CustomToolTip
Content="?"
Placement="Top"
Source="{x:Bind ButtonControl, Mode=OneWay}" />
</ToolTipService.ToolTip>
</Button>
如果没有此依赖属性,是否有其他解决方案来获取父母?