我正在尝试将Canvas.Left
和Canvas.Top
附加属性绑定到我的自定义X和Y属性,但没有成功,我正在使用以下XAML。
<Style TargetType="{x:Type layout:BankBaseControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type layout:BankBaseControl}">
<ContentPresenter Content="{TemplateBinding Marker}" >
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Ellipse Fill="Red" Width="{Binding Width}"
Height="{Binding Height}"
Canvas.Left="{Binding X, Mode=TwoWay}"
Canvas.Top="{Binding Y, Mode=TwoWay}"/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
正确应用样式(宽度和高度绑定正常工作),但附加属性似乎没有查看X和Y值。我尝试使用以下代码进行此绑定:
SetBinding(Canvas.LeftProperty, new Binding("X")
{ Source = Marker, Mode = BindingMode.TwoWay });
它有效,但我非常想从XAML那里做到。
编辑:
我也尝试将XAML中的绑定更改为Canvas.Left="100" Canvas.Top="100"
,但没有运气,椭圆仍会显示在坐标0,0上。
答案 0 :(得分:1)
你拥有的是无效的。您的Ellipse不是Canvas的子项,因此不会使用Canvas附加属性。您的Ellipse是ContentPresenter的子项,它是您的BankBaseControl的子项。
您需要在BankBaseControl上设置附加属性,假设它在Canvas面板中托管,如下所示:
<Style TargetType="{x:Type layout:BankBaseControl}">
<Setter Property="Canvas.Left" Value="{Binding RelativeSource="{RelativeSource Self}, Path=Marker.X, Mode=TwoWay}" />
<Setter Property="Canvas.Top" Value="{Binding RelativeSource="{RelativeSource Self}, Path=Marker.Y, Mode=TwoWay}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type layout:BankBaseControl}">
<ContentPresenter Content="{TemplateBinding Marker}" >
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Ellipse Fill="Red" Width="{Binding Width}" Height="{Binding Height}" />
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>