WPF:新窗口中的工具提示

时间:2015-03-16 13:40:44

标签: c# wpf popup tooltip

我有一个ToolTip的以下样式:

        <Style x:Key="ToolTipPopUp" TargetType="{x:Type ContentControl}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ContentControl}">
                        <StackPanel Orientation="Horizontal">
                            <StackPanel.ToolTip>
                                <ToolTip Visibility="Hidden" />
                            </StackPanel.ToolTip>
                            <ContentPresenter />
                            <Image Source="/Resources/info.png" 
                                   ToolTip="{TemplateBinding ToolTip}"
                                   Height="12"
                                   VerticalAlignment="Top" />
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

通过以下方式调用:

            <ContentControl Style="{StaticResource ToolTipPopUp}" ToolTip="Hello world">
                <CheckBox Content="I am a check box" />
            </ContentControl>

这允许我将ToolTip附加到我想要的任何控件上,并按预期显示ToolTip

enter image description here

客户现在要求在弹出窗口中显示ToolTip,因为内容有时会相当冗长。

有没有办法将此样式转换为显示弹出窗口?我已经读过Window ContentControl无法使用 private Window _toolTipWindow; /// <summary> /// Display the tool tip text in a new window /// </summary> public void ToolTipPopUpClicked(object sender, RoutedEventArgs e) { if (_toolTipWindow == null || !_toolTipWindow.IsVisible) { _toolTipWindow = new Window(); } String _instructions = (((Button)sender).TemplatedParent as ContentControl).ToolTip.ToString(); _toolTipWindow.Width = 300; _toolTipWindow.Height = 200; _toolTipWindow.Content = _instructions; _toolTipWindow.Show(); } ,所以如果有不同的方法,我会对此持开放态度。

修改

我有一个静态资源的指令(为了清楚起见未显示),我绑定到ToolTip(这就是我现在正在做的)。我正在考虑创建一个单独的窗口,当用户点击工具提示图标(蓝色&#39; i&#39;)时,该窗口会打开,只要有时间,就会更新弹出窗口中的属性(即工具提示内容)单击工具提示图标(因此,如果窗口已打开,则窗口中的说明会更改)。然后用户可以在选择时关闭窗口。

感谢Theodosius指出我正确的方向。以下是我实现此方法的方法:

MainPageViewModel.cs(执行程序的最顶层窗口):

<Style x:Key="ToolTipPopUp" TargetType="{x:Type ContentControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ContentControl}">
                <StackPanel Orientation="Horizontal">
                    <ContentPresenter />
                    <Button Width="Auto">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Click">
                                <ei:CallMethodAction TargetObject="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}},
                                                                                        Path=DataContext}"
                                                             MethodName="ToolTipPopUpClicked" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                        <Button.Template>
                            <ControlTemplate>
                                <Image Source="Resources/info.png" 
                                            ToolTip="{TemplateBinding ToolTip}"
                                            Height="12"
                                            VerticalAlignment="Top" >

                                </Image>
                            </ControlTemplate>
                        </Button.Template>
                    </Button>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

StylesDictionary.xaml

            <ContentControl Name="PopupExample" 
                            Style="{StaticResource ToolTipPopUp}" 
                            ToolTip="Hello world">
                <CheckBox Content="I am a check box" />
            </ContentControl>

XAML文件

ToolTip

这保留了标准{{1}}功能,并在用户点击工具提示图标(蓝色&#39; i&#39;)时提供弹出窗口。

1 个答案:

答案 0 :(得分:-1)

那么呢?

<Style x:Key="ToolTipPopUp" TargetType="{x:Type ContentControl}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ContentControl}">
                    <StackPanel Orientation="Horizontal">
                        <StackPanel.ToolTip>
                            <ToolTip Visibility="Hidden" />
                        </StackPanel.ToolTip>
                        <ContentPresenter />
                        <Image Source="/info.png" 
                               ToolTip="{TemplateBinding ToolTip}"
                               Height="12"
                               VerticalAlignment="Top" >
                            <Image.Style>
                                <Style>
                                    <EventSetter Event="Mouse.MouseEnter" Handler="Show_PopupToolTip" />
                                    <EventSetter Event="Mouse.MouseLeave" Handler="Hide_PopupToolTip"/>
                                </Style>
                            </Image.Style>
                        </Image>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

代码隐藏...

Window win;

    private void Show_PopupToolTip(object sender, MouseEventArgs e)
    {
        var fred = ((Image)sender).TemplatedParent;

        if (fred != null)
        {
            ContentControl c = fred as ContentControl;
            string myText = c.ToolTip.ToString();

            if (!String.IsNullOrEmpty(myText))
            {
                if (win == null || !win.IsVisible)
                    win = new Window();
                win.Height = 275;
                win.Width = 275;
                win.Content = myText;
                win.Show();
            }
        }
    }
    private void Hide_PopupToolTip(object sender, MouseEventArgs e)
    {
        //if (win != null)
        //{
        //    win.Close();
        //}
    }
相关问题