1

スライダーGridでスケーリング/ズームしたものがあります。ScaleTransform実行時に、多くの UIElements が this に追加されますGrid

いくつかのツールチップを表示したいのですが、スケーリングされていません! どうすればいいですか?

例: GridscaleX と scaleY 2 があるため、新しい ScaleTransform(0.5, 0.5) を設定しましたが、役に立ちませんでした。最も類似した値は 0.740 のようです。なぜですか? EvenGridの LayoutTransform.Inverse は、スケール値 0.5 に設定されています。

XAML:

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Height="Auto" Width="Auto" Name="graphScrollViewer" ScrollChanged="graphScrollViewer_ScrollChanged">
<Grid Margin="0,0,0,0" Name="graphGrid" Width="Auto" Height="Auto" ScrollViewer.IsDeferredScrollingEnabled="True"  MouseLeftButtonDown="graphGrid_MouseLeftButtonDown" MouseLeftButtonUp="graphGrid_MouseLeftButtonUp" MouseMove="graphGrid_MouseMove">
    <Grid.LayoutTransform>
        <ScaleTransform ScaleX="{Binding ElementName=sldZoom, Path=Value}" ScaleY="{Binding ElementName=sldZoom, Path=Value}" />
    </Grid.LayoutTransform>
</Grid>
</ScrollViewer>

<Slider Minimum="0.1" Maximum="20" Value="1" x:Name="sldZoom" Panel.ZIndex="10" Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,20,20" Height="23" Width="100"  ValueChanged="sldZoom_ValueChanged"/>  

コード ビハインド: (グリッドに動的に追加された Rectangle (MouseEnter イベント) のメソッド)

private void rect_MouseEnter(object sender, MouseEventArgs e)
{
    RectToolTip = new TextBlock();
    RectToolTip.HorizontalAlignment = HorizontalAlignment.Left;
    RectToolTip.VerticalAlignment = VerticalAlignment.Top;
    RectToolTip.TextAlignment = TextAlignment.Center;
    RectToolTip.Height = this.HeaderTwoHeight + 1;
    RectToolTip.Text = " " + (RectsTasks[(sender as Rectangle)]).Info + " ";
    RectToolTip.Background = this.ToolTipBackground;
    RectToolTip.Foreground = this.ToolTipFontColor;

    RectToolTipBorder = new Border();
    RectToolTipBorder.Child = RectToolTip;
    RectToolTipBorder.BorderThickness = new Thickness(this.ToolTipBorderThickness);
    RectToolTipBorder.BorderBrush = this.ToolTipBorderColor;
    RectToolTipBorder.Margin = new Thickness(e.GetPosition((graphGrid)).X + 10,     e.GetPosition((graphGrid)).Y + 10, 0, 0);
    RectToolTipBorder.VerticalAlignment = System.Windows.VerticalAlignment.Top;
    RectToolTipBorder.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

    graphGrid.Children.Add(RectToolTipBorder);

    RectToolTipBorder.LayoutTransform = RectToolTip.LayoutTransform = new ScaleTransform(????);           
    Grid.SetZIndex(RectToolTip, 20);
    Grid.SetZIndex(RectToolTipBorder, 20);
}
4

1 に答える 1

6

子がそのまま残るように、子要素に逆変換を割り当てる必要があります。

RectToolTipBorder.LayoutTransform = graphGrid.LayoutTransform.Inverse as Transform;
于 2013-08-01T05:55:40.680 に答える