wpf 自制按键的问题

QQRN 2010-11-10 11:07:38
做个按键,按键里面放入一个Image和一个TextBlock以便在显示图片和文字
<Window.Resources>
<Style TargetType="Button" x:Key="TB">
<Setter Property="Height" Value="64"/>
<Setter Property="Width" Value="64"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<StackPanel>
<Image Source="F:\mydoc\d.jpg" Width="32" Height="32" />
<TextBlock Text="樱桃小丸子" HorizontalAlignment="Center"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Button Style="{StaticResource TB}"></Button>
</Grid>
至于按键的框框触发器动画之类的我就不写了,占地方。
现在我的问题是,按键要代码动态加入进去,然后每个按钮的图片和文字都不同,怎么做?
...全文
167 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQRN 2010-11-12
  • 打赏
  • 举报
回复
用ListBox跟用StackPanel一样,我用StackPanel主要是想将按钮横着排列,不过这个都跟问题无关。
这问题主要是button会套用个模板,我就是想动态的修改模板里面的image和TextBlock的属性而已。
哎,结贴吧
绿色夹克衫 2010-11-10
  • 打赏
  • 举报
回复
先别急着换,还是先单开个项目做实验吧,说实话从WinForm转WPF,数据绑定和模板这块且适应呢!

[Quote=引用 8 楼 qqrn 的回复:]

汗,我是修改Button然后塞StackPanel里面去的,我换ListBox看看…………
[/Quote]
QQRN 2010-11-10
  • 打赏
  • 举报
回复
汗,我是修改Button然后塞StackPanel里面去的,我换ListBox看看…………
绿色夹克衫 2010-11-10
  • 打赏
  • 举报
回复
我估计LZ想要实现的方法,用一个ListBox,配合数据绑定,应该可以做,写一下ListBoxItem的样式,里面加个Button,再用数据模板DataTemplate去绑定数据,应该就可以。

LZ最好先去下一些微软数据绑定的例子,讲的比较详细,另外再看看微软的SimpleStyle项目,应该可以比较快的了解模板这一块儿。

不过刚模WPF两三天,能够实现想要的功能就算很不容易了,以后慢慢优化吧!
[Quote=引用 6 楼 qqrn 的回复:]
按键是程序运行期间动态添加,其样式为 <Style TargetType="Button" x:Key="TB">
里面的图标和文字也是添加按键时候换掉的
也就是说每个按键的图标和文字在添加前是不确定的
我刚摸W……
[/Quote]
QQRN 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 litaoye 的回复:]
这就叫搞定了?方法很多,LZ的方法至少不符合MVVM构架。
直接用Xaml就可以,至于点击后执行不同的程序,可以用Command
[/Quote]
按键是程序运行期间动态添加,其样式为 <Style TargetType="Button" x:Key="TB">
里面的图标和文字也是添加按键时候换掉的
也就是说每个按键的图标和文字在添加前是不确定的
我刚摸WPF两三天,很多东西都不明白,好像Xaml里面的TemplateBinding 可以做到一些功能,但是我试不出来。
如果你有更好的方式,请赐教……
绿色夹克衫 2010-11-10
  • 打赏
  • 举报
回复
动态创建多个的话,用数据绑定来弄
绿色夹克衫 2010-11-10
  • 打赏
  • 举报
回复
感觉LZ的需求不用重载ControlTemplate,把

<Image Source="F:\mydoc\d.jpg" Width="32" Height="32" x:Name="myImage"/>
<TextBlock Text="樱桃小丸子" HorizontalAlignment="Center" x:Name="myTextBlock"/>


作为Button的Content多直接
绿色夹克衫 2010-11-10
  • 打赏
  • 举报
回复
这就叫搞定了?方法很多,LZ的方法至少不符合MVVM构架。
直接用Xaml就可以,至于点击后执行不同的程序,可以用Command

[Quote=引用 2 楼 qqrn 的回复:]

自己解决了。。。。
先给Image和TextBlock加上Name
VB.NET code

Style TargetType="Button" x:Key="TB">
<Setter Property="Height" Value="64"/>
<Setter Property="Width" Value="64"/>
<Setter Property="Temp……
[/Quote]
QQRN 2010-11-10
  • 打赏
  • 举报
回复
自己解决了。。。。
先给Image和TextBlock加上Name

Style TargetType="Button" x:Key="TB">
<Setter Property="Height" Value="64"/>
<Setter Property="Width" Value="64"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<StackPanel>
<Image Source="F:\mydoc\d.jpg" Width="32" Height="32" x:Name="myImage"/>
<TextBlock Text="樱桃小丸子" HorizontalAlignment="Center" x:Name="myTextBlock"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>


然后代码里面

NewButton.Template.FindName("myImage", NewButton).Source = MyImageSource
NewButton.Template.FindName("myTextBlock", NewButton).Text = ShowText

搞掂.......
哎,分给谁呢???
QQRN 2010-11-10
  • 打赏
  • 举报
回复
我是不是发错地方了啊?怎么没人UP一下呢?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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