XAML自定义属性显示问题

天外怪魔 2012-04-15 08:44:53
自定义控件的Style,希望通过用户自定义属性UserDefineProperty值的不同改变控件外观
具体就是,如果UserDefineProperty取1,则画一个圆,如果取2则画一条线。UserDefinePropertyToTemplateConv
转换器负责吧1转换成字符串"Status1",把2转换成字符串"Status2"。
下列xaml文件为何总是报错?
<ControlTemplate x:Key="Status1">
<Grid Height="20" Width="20" IsHitTestVisible="False">
<Ellipse .../>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="Status2">
<Line ... />
</ControlTemplate>

<Style TargetType="{x:Type s:Class1}">
<Setter Property="Template" Value="{Binding Source={StaticResource ResourceKey={Binding RelativeSource={RelativeSource Mode=Self}, Path=UserDefineProperty, Converter=conv:UserDefinePropertyToTemplateConv}}}" >
</Setter>
</Style>
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
沝林 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:

这种问题不用这么做吧,在模板中先画好圆和直线, 用Trigger或视图状态来控制圆和直线的显示;你可以看看Silverlight Toolkit的源码,通常这种问题都是这么处理的

我发现Trigger之支持从Control继承来的属性,我自定义的属性不支持……
[/Quote]

不完全对,Trigger支持的是依赖属性,并不只是从Control继承来的属性,你想要Trigger支持自定义属性,那么你的自定义属性必须是依赖属性。如果是非依赖属性,也可以支持Trigger,但是需要DataTrigger类型,同时属性必须实现InotifyPropertyChanged接口
天外怪魔 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 3 楼 的回复:
引用 2 楼 的回复:

这种问题不用这么做吧,在模板中先画好圆和直线, 用Trigger或视图状态来控制圆和直线的显示;你可以看看Silverlight Toolkit的源码,通常这种问题都是这么处理的

我发现Trigger之支持从Control继承来的属性,我自定义的属性不支持……


不完全对,Trigger支持的是依赖属性,并不只是从Contr……
[/Quote]
改依赖属性好了。
但是
<Setter TargetName="fuck" Property="Stroke" Value="Red"></Setter>
还是报异常,能帮忙再看看么?
沝林 2012-04-17
  • 打赏
  • 举报
回复
这种问题不用这么做吧,在模板中先画好圆和直线, 用Trigger或视图状态来控制圆和直线的显示;你可以看看Silverlight Toolkit的源码,通常这种问题都是这么处理的
天外怪魔 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

这种问题不用这么做吧,在模板中先画好圆和直线, 用Trigger或视图状态来控制圆和直线的显示;你可以看看Silverlight Toolkit的源码,通常这种问题都是这么处理的
[/Quote]
<Style TargetType="{x:Type s:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Height="20" Width="20" IsHitTestVisible="False">
<Line StrokeThickness="2" X1="0" Y1="0" X2="1" Y2="1" Stretch="Fill" x:Name="fuck">
<Line.Stroke>
Yellow
</Line.Stroke>
</Line>
<Line StrokeThickness="2" X1="0" Y1="0" X2="1" Y2="-1" Stretch="Fill">
<Line.Stroke>
Yellow
</Line.Stroke>
</Line>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="MyStatus" Value="MyStatus.Status2">
<Setter TargetName="fuck" Property="Stroke" Value="Red"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
紫色那句提示:
Error 18 Cannot find the Template Property 'MyStatus' on the type 'System.Windows.Controls.Control'. Line 127 Position 74. X:\ds\Visual Studio 2010\Projects\TestTest\MyClass.xaml 127
天外怪魔 2012-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

这种问题不用这么做吧,在模板中先画好圆和直线, 用Trigger或视图状态来控制圆和直线的显示;你可以看看Silverlight Toolkit的源码,通常这种问题都是这么处理的
[/Quote]
我发现Trigger之支持从Control继承来的属性,我自定义的属性不支持……
sundayX 2012-04-15
  • 打赏
  • 举报
回复
没这样试过,对于这种情况,我们一般直接在template里画一个圆和一个直线,然后通过一个依赖属性来控制。

8,737

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧