繁体   English   中英

如何在WPF XAML中制作自定义工具提示模板

[英]How to make a custom tool tip template in WPF XAML

我在表单上有许多按钮(精确地说是devcomponents ButtonDropDown控件)。

我想为每个工具显示一个工具提示,其中在顶部包含一个标题,在左侧包含一个图像,在右侧包含一个描述。

标头需要绑定到ButtonDropDown.Header ,图像必须绑定到ButtonDropDown.Image 然后,我还需要在某处定义描述。

我仅使用WPF已有几个星期,因此尽管进行了一些研究,但仍无法通过搜索找到任何答案。

以下是我尝试创建实际上根本不起作用的模板的尝试:

<Style TargetType="dcr:ButtonDropDown">
    <Setter Property="OverridesDefaultStyle" Value="True"></Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="dcr:ButtonDropDown">
                <ContentControl>
                    <ContentControl.ToolTip>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>
                            <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
                            Content="{TemplateBinding Header}" FontWeight="Bold" />
                            <Viewbox Grid.Row="1" Grid.Column="0" Width="64" Height="32" Margin="3">
                                <ContentControl Content="{TemplateBinding Image}" />
                            </Viewbox>
                            <Label Grid.Row="1" Grid.Column="1"
                            Content="{TemplateBinding ToolTip.Content}" />
                        </Grid>
                    </ContentControl.ToolTip>
                </ContentControl>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后,我定义一个按钮,如下所示:

<dcr:ButtonDropDown Header="-X" Command="{Binding MoveCommand}" CommandParameter="xMinus"
                    ImagePosition="Top" IsEnabled="{Binding UserConfiguration.Move.Visible}"
                    ToolTip="move x axis down">
    <dcr:ButtonDropDown.Image>
        <Viewbox Width="32" Height="32" Margin="3">
            <ContentControl Content="{StaticResource minusXImage}" />
        </Viewbox>
    </dcr:ButtonDropDown.Image>
</dcr:ButtonDropDown>

请有人能给我一个想法去解决这个问题吗?

我已经通过某种方式回答了这个问题。

ToolTip定义了以下样式:

<Style TargetType="ToolTip">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate  TargetType="ToolTip">
                <Border Background="GhostWhite" BorderBrush="Gainsboro" BorderThickness="1">
                <Grid Background="White">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2"
                           Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ToolTip}}, 
                           Path=PlacementTarget.(dcr:ButtonDropDown.Header)}" 
                           FontWeight="Bold" />
                    <Viewbox Grid.Row="1" Grid.Column="0" Width="64" Height="32" Margin="3">
                        <ContentControl Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ToolTip}}, 
                            Path=PlacementTarget.(dcr:ButtonDropDown.Image)}" />
                    </Viewbox>
                    <Label Grid.Row="1" Grid.Column="1"
                           Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ToolTip}},
                           Path=PlacementTarget.(dcr:ButtonDropDown.ToolTip)}" />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后,我如上所述定义一个按钮,并根据需要在ToolTip显示ToolTip文本和标题。

关键是绑定:

Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type  ToolTip}}, 
Path=PlacementTarget.(dcr:ButtonDropDown.Header)}" 

它将Tooltip找到为Label的祖先,并将其PlacementTarget转换为ButtonDropDown

无效的是图像。 它出现在ToolTip但已从按钮中删除。

如果其他控件不是ButtonDropDown控件,这也会破坏它们的工具提示。

我开始认为我需要创建一些自定义控件,其中包含每个控件的ToolTip所需的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM