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>
至于按键的框框触发器动画之类的我就不写了,占地方。
现在我的问题是,按键要代码动态加入进去,然后每个按钮的图片和文字都不同,怎么做?
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用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一下呢?
内容概要:本文档为一份《计算机程序设计语言(C++)》课程的实验报告,涵盖了从基础语法到面向对象编程的多个实验内容。实验内容包括基础语法练习(如银行存款计算、数值比较、科学计算)、控制结构(分支与循环,如闰年判断、素数判定、Kaprekar黑洞数)、数组操作(一维与二维数组的排序、查找、极值计算、杨辉三角)、函数定义与应用(递归、参数传递、函数重载)以及面向对象编程(类与对象的设计、继承、多态性、文件操作)。文档详细展示了每个实验的任务描述、具体C++代码实现、测试结果及实验分析,体现了从简单到复杂、逐步深入的学习路径。; 适合人群:具备C++基础语法知识,正在学习或巩固程序设计课程的在校大学生及初级编程学习者。; 使用场景及目标:①作为C++课程的配套实验指导材料,帮助学生通过实践掌握编程基础知识和核心算法;②用于自学练习,提升对循环、数组、函数和面向对象等核心概念的理解与编码能力。; 阅读建议:学习者应结合文档中的代码实例,动手在编程环境中逐一实现并调试,重点关注代码逻辑、边界条件处理和算法效率,通过对比预期输出与实际输出加深对知识点的掌握。

111,129

社区成员

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

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

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