显示一组矩形的自定义工具提示(图表上的点)

时间:2014-12-03 10:12:25

标签: c# wpf wpf-controls

我有一个Canvas,我在其上绘制了一些Rectangles,表示画布上用户选择的多个位置。

我想为每个矩形创建一个ToolTip,显示矩形的x和y坐标以及到另一个点的距离:"手写笔点"。

当创建矩形时,x和y坐标是已知的,但是到触笔点的距离不是工具提示每次显示时都需要更新其文本。

我尝试使用如下所示的绑定,但这只是放置文本" System.Windows.Control.ToolTip"在工具提示中。

    ...

    Rectangle rectangle = new Rectangle
    {
        Width = _rectWidth,
        Height = _rectWidth,
        Fill = new SolidColorBrush(Colors.Red)
    };

    rectangle.ToolTip = new ToolTip();
    Binding binding = new Binding()
    {
        Source = this,
        Path = new PropertyPath("ToolTipBinding"),
        Mode = BindingMode.OneWay,
        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
    };

    BindingOperations.SetBinding( rectangle.ToolTip as ToolTip ,ToolTipService.ToolTipProperty, binding);
}

public string ToolTipBinding 
{
    get
    {
        return "How would i get the data context here (even if it bound correctly)";
    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案。这将在画布上显示一个点列表作为方块。下面的TargetList是包含每个点所需数据的Target个对象的列表。希望这有助于某人。

为工具提示创建的资源:

<UserControl.Resources>
    <Style TargetType="{x:Type ToolTip}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToolTip}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                            <RowDefinition />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <TextBox Grid.Row="0" Grid.Column="0" Text="X:" />
                        <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=PositionX}" />
                        <TextBox Grid.Row="1" Grid.Column="0" Text="Z:" />
                        <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Path=PositionZ}" />
                        <TextBox Grid.Row="2" Grid.Column="0" Text="ΔX:" />
                        <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=DeltaX}" />
                        <TextBox Grid.Row="3" Grid.Column="0" Text="ΔZ:" />
                        <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Path=DeltaZ}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
<UserControl.Resources>

项目控制

<ItemsControl Grid.Row="0" Grid.Column="0" ClipToBounds="True" ItemsSource="{Binding TargetList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left" Value="{Binding Path=PositionScreen.X}" />
            <Setter Property="Canvas.Top" Value="{Binding Path=PositionScreen.Z}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle Width="{Binding RectangleSize}" 
                       Height="{Binding RectangleSize}" 
                       Fill="{Binding RectangleBrush}" >
                <Rectangle.ToolTip>
                    <ToolTip />
                </Rectangle.ToolTip>
            </Rectangle>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

目标类,仅显示属性名称。这些都会根据需要进行更新。

public class Target : ObservableObject
{
    public Point3D PositionX...

    public Point3D PositionZ...

    public double DeltaX...

    public double DeltaZ...

    public Point3D PositionScreen...

    public double RectangleSize...

    public Brush RectangleBrush...

}
相关问题