【问题标题】:wpf canvas add element from resourceswpf canvas从资源中添加元素
【发布时间】:2014-01-14 13:27:49
【问题描述】:

我是 wpf 的新手

<Window.Resources>
        <Ellipse x:Key="connectorNode" Height="20" Width="20" Fill="Green" Stroke="Black" StrokeThickness="2" MouseMove="Ellipse_MouseMove" MouseLeftButtonDown="Ellipse_MouseLeftButtonDown" MouseLeftButtonUp="Ellipse_MouseLeftButtonUp"></Ellipse>
 </Window.Resources>

如何将资源中的 Ellipse 实例添加到画布,我只想指定 Canvas.LeftCanvas.Right,但使用与资源中相同的属性值

<Canvas>
</Canvas>

【问题讨论】:

  • 您想在 xaml 中还是在代码中执行此操作?
  • @Djerry 我已经在代码中完成了,但我还需要在 xaml 中进行测试
  • 您通常不会使用任何 UI 元素作为资源。你想达到什么目的?请注意,您甚至不能同时将该椭圆添加到多个面板。
  • 你可以做的是创建一个样式并将它应用到你正在添加的椭圆上。
  • @Djerry 正确的风格似乎是我需要的!

标签: wpf xaml


【解决方案1】:

您似乎想创建一个通用样式并将其应用于添加的每个 Ellipse,您可以这样做:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="EllipseStyle" TargetType="Ellipse">
            <Setter Property="Height" Value="20"/>
            <Setter Property="Width" Value="20" />
            <EventSetter Event="Control.MouseMove" Handler="Control_MouseMove" />
        </Style>
    </Window.Resources>
    <Grid>
        <Canvas>
            <Ellipse Style="{StaticResource EllipseStyle}" />
        </Canvas>
    </Grid>
</Window>

编辑:我添加了“EventSetter”,因此您的事件可以在样式中定义(请参阅this post)。

【讨论】:

  • 你不能这样设置像MouseMove这样的事件处理程序。
  • @NovitchiS 我想,我必须将它们添加到每个实例中
  • @NovitchiS 听说过EventSetter吗?
  • @Clemens:好时机,刚刚更新了我的答案以包含它!
  • @Clemens 我忘了,从来没有真正需要使用它们。
【解决方案2】:

如果你真的想使用资源中的元素并且只应用画布属性,你可以这样做:

<Window.Resources>
    <ControlTemplate x:Key="connectorNode" >
        <Ellipse 
            Height="20" 
            Width="20" 
            Fill="Green" 
            Stroke="Black" 
            StrokeThickness="2" 
            MouseMove="Ellipse_MouseMove" 
            MouseLeftButtonDown="Ellipse_MouseLeftButtonDown" 
            MouseLeftButtonUp="Ellipse_MouseLeftButtonUp" />
    </ControlTemplate>
</Window.Resources>
<Canvas>
    <ContentControl Template="{StaticResource connectorNode}"/>
    <ContentControl Canvas.Left="50" Template="{StaticResource connectorNode}"/>
</Canvas>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2014-04-12
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多