工具提示内容更改将应用​​于所有元素

时间:2015-06-16 01:56:07

标签: wpf tooltip gridsplitter

我正在创建一个应用程序,我在其中动态创建网格分割器并在代码中应用样式。该样式还为这些网格分裂器设置工具提示。我正在使用工具提示来显示控件的宽度,并在调整大小时动态更新它们。当我使用DragDelta事件更改一个工具提示的内容时,它将应用于所有网格分裂器的工具提示(所有这些都开始显示相同的宽度)。以下是代码:

样式XAML:

<Style x:Key="VGS" TargetType="GridSplitter">
                <Setter Property="IsTabStop" Value="False" />
                <Setter Property="Width" Value="5"/>
                <Setter Property="VerticalAlignment" Value="Stretch"/>
                <Setter Property="Grid.RowSpan" Value="1"/>
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Opacity="0"/>
                    </Setter.Value>
                </Setter>

                <Setter Property="ToolTip">
                    <Setter.Value>
                        <ToolTip MinWidth="75" BorderBrush="Black" HasDropShadow="False"  
                                 Placement="Top" PlacementRectangle="-70,-5,50,50" 
                                 HorizontalContentAlignment="Left" >
                        </ToolTip>
                    </Setter.Value>
                </Setter>
                <EventSetter Event="DragDelta" Handler="Drag_VerticalGridSplitter"/>
                <EventSetter Event="PreviewMouseLeftButtonUp" Handler="Update_TableColumnDimensions"/>
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="Show_ToolTip"/>

            </Style>

创建GridSplitter的方法:

private GridSplitter Get_VerticalGridSplitter(int column)
    {
        GridSplitter gs = new GridSplitter();
        Grid.SetRow(gs, 0);
        Grid.SetColumn(gs, column);
        gs.ToolTip = "Width: 150";
        gs.Style = MainGrid.FindResource("VGS") as Style;

        return gs;
    }

更新工具提示的方法:

void Drag_VerticalGridSplitter(object sender, DragDeltaEventArgs e)
    {
        //Sets grid width as the grid is resized
        double newGridWidth = 0;

        foreach (ColumnDefinition columnDefinition in MainGrid.ColumnDefinitions)
            newGridWidth = newGridWidth + columnDefinition.Width.Value;

        MainGrid.Width = newGridWidth;

        //update border
        MainGridBorder.Width = MainGrid.Width + 2;

        GridSplitter gs = sender as GridSplitter;
        ToolTip tt = gs.ToolTip as ToolTip;

        tt.Content = "Width: " + MainGrid.ColumnDefinitions[Grid.GetColumn(gs)].Width;
        tt.PlacementTarget = gs;
        tt.IsOpen = true;
    }

我觉得当我更新内容时,它会改变风格。任何人都可以指出这里有什么问题。 感谢

1 个答案:

答案 0 :(得分:0)

我怀疑这个问题与xaml资源的工作方式有关。由于您要在样式设置器中创建ToolTip实例,因此您可能只创建一个ToolTip并将其分配给使用该样式的每个GridSplitter。您可以尝试将x:Shared="false"添加到您的样式中,以便在每次应用时创建样式的新实例,或者您可以尝试定义针对ToolTip类型的单独样式并直接使用该样式。