我正在创建一个应用程序,我在其中动态创建网格分割器并在代码中应用样式。该样式还为这些网格分裂器设置工具提示。我正在使用工具提示来显示控件的宽度,并在调整大小时动态更新它们。当我使用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;
}
我觉得当我更新内容时,它会改变风格。任何人都可以指出这里有什么问题。 感谢
答案 0 :(得分:0)
我怀疑这个问题与xaml资源的工作方式有关。由于您要在样式设置器中创建ToolTip
实例,因此您可能只创建一个ToolTip
并将其分配给使用该样式的每个GridSplitter
。您可以尝试将x:Shared="false"
添加到您的样式中,以便在每次应用时创建样式的新实例,或者您可以尝试定义针对ToolTip
类型的单独样式并直接使用该样式。