WPF控件模板的问题求大神帮忙在线等。

tangxueyang 2016-06-24 09:35:30
如线图:想实现一个这样的效果,一个有6个图标按钮,鼠标移上改变背景图片,现在背景图片没有显示出来,我用的是控件模板做的,图片路径是通过一个附加属性绑定的,把图片路径直接绑定到Content上可以显示图片路径,可是绑定到ImageSource上图片就显示。


下面是我页面的代码:


<Window x:Class="BankQueued.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BankQueued"
xmlns:common="clr-namespace:BankQueued.Common"
mc:Ignorable="d"
Title="MainWindow" Height="500" Width="800">
<Window.Resources>
<Style x:Key="Buttonlist" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="150"/>
<RowDefinition Height="40"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<TextBlock x:Name="MenuName" Margin="0,5,0,0" TextWrapping="Wrap" Text="{TemplateBinding Content}" VerticalAlignment="Center" d:LayoutOverrides="Width, Height" Grid.Row="1" HorizontalAlignment="Center" Foreground="#FF6382CD" FontSize="26.667" FontWeight="Bold"/>
<TextBlock x:Name="MenuNum" Margin="0,5,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Center" d:LayoutOverrides="Width, Height" Grid.Row="2" HorizontalAlignment="Center" Foreground="#FFA5A5A5" FontSize="20" />
<Border x:Name="MenuBtn" Grid.Row="0" Height="150" Cursor="Hand">
<Border.Background>
<ImageBrush ImageSource="{TemplateBinding common:ControlAttachProperty.BgImg}" Stretch="Uniform"/>
</Border.Background>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="MenuBtn">
<Setter.Value>
<ImageBrush ImageSource="{TemplateBinding common:ControlAttachProperty.BgImg}" Stretch="Uniform"/>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="#FFFAC952" TargetName="MenuName"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0" Background="#FF6389EA">

</StackPanel>
<StackPanel Width="Auto" Height="Auto" DockPanel.Dock="Left" Grid.Row="0" Grid.Column="1">
<Label Content="请点击选择服务内容" HorizontalContentAlignment="Center" FontSize="48" FontWeight="Bold" Foreground="#FF6389EA" Padding="5" Margin="0,100,0,0" FontFamily="Microsoft YaHei" />
<UniformGrid Margin="0,50,0,0" Width="880" Height="560" Rows="2" Columns="3">
<Button Content="个人现金" Style="{DynamicResource Buttonlist}" common:ControlAttachProperty.BgImg="Skin/ico/gerenxianjin.png"></Button>
<Button Content="理财业务" Style="{DynamicResource Buttonlist}" common:ControlAttachProperty.BgImg="Skin/ico/licai.png"></Button>
<Button Content="个人外汇" Style="{DynamicResource Buttonlist}" common:ControlAttachProperty.BgImg="Skin/ico/gerenwaihui.png"></Button>
<Button Content="非现金" Style="{DynamicResource Buttonlist}" common:ControlAttachProperty.BgImg="Skin/ico/feixianjin.png"></Button>
<Button Content="对公业务" Style="{DynamicResource Buttonlist}" common:ControlAttachProperty.BgImg="Skin/ico/duigong.png"></Button>
<Button Content="VIP" Style="{DynamicResource Buttonlist}" common:ControlAttachProperty.BgImg="Skin/ico/vip.png"></Button>
</UniformGrid>
</StackPanel>
<TextBlock x:Name="tg" Margin="0,0,0,0" TextWrapping="Wrap" Text="个人现金业务" VerticalAlignment="Center" d:LayoutOverrides="Width, Height" Grid.Row="1" HorizontalAlignment="Center" Foreground="#FFECECEC" FontSize="26.667" FontWeight="Bold"/>

</Grid>
</Window>


后台用到的附加属性:

public static class ControlAttachProperty
{
/// <summary>
/// 背景图片
/// </summary>
public static readonly DependencyProperty BgImgProperty = DependencyProperty.RegisterAttached(
"BgImg", typeof(string), typeof(ControlAttachProperty), new FrameworkPropertyMetadata(null));
public static string GetBgImg(DependencyObject d)
{
return (string)d.GetValue(BgImgProperty);
}
public static void SetBgImg(DependencyObject obj, string value)
{
obj.SetValue(BgImgProperty, value);
}
}


<ImageBrush ImageSource="{TemplateBinding common:ControlAttachProperty.BgImg}" Stretch="Uniform"/>
这个地方明明有值但是图片就是不显示,求大神帮助或者有更好的方式实现类似的效果,都可以谢谢了!
...全文
365 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
TemplateBinding 寻找的是Button中的父级属性,然而Button中并没有common:ControlAttachProperty.BgImg 这个值。 应当 重新定义个MyButton类 继承自Button,并添加一个依赖项属性ImageSource,这样在xaml中类似:<button ImageSouce="xxxx"> 在模板中再使用TemplateBinding
tangxueyang 2016-06-24
  • 打赏
  • 举报
回复
求大神帮忙!
龍过鸡年 2016-06-24
  • 打赏
  • 举报
回复
引用 1 楼 tangxueyang 的回复:
求大神帮忙!
整个解决方案不是很好,建议把你的业务写成类,作为对象进行处理 class 业务: INotifyPropertyChanged { string 名称 { get; set; }, string 描述或备注 { get; set; } // 可以作为 tooltip Image Or ImageBrush 图片 { get; set; } // 介绍个网站给你,https://materialdesignicons.com/ ... 其他属性 ctor 业务() { // 给图片一个默认值,在初始化ui的时候可以提高效率 } public void setimage(string path) // 程序运行后,用下面的方法更换图片 public void setimage(resourcekey) public void setimage(stream) } 用 System.Collections.ObjectModel.ObservableCollection<业务> 作为数据源 source 界面上使用 itemscontrol.itemssource = source; 为 itemscontrol 设置 itemtemplate,itemspanel ,如果使用 uniformgrid 只设置 columns 就可以了 这样附加属性就没有必要定义了,因为图片等属性都可以直接 binding, 这样数据和逻辑都比较清晰,业务有拓展添加起来也方便
lzl1030152809 2016-06-24
  • 打赏
  • 举报
回复

        <Style x:Key="Buttonlist" TargetType="{x:Type Button}">
            <Setter Property="Cursor" Value="Hand"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="150"/>
                                <RowDefinition Height="40"/>
                                <RowDefinition Height="30"/>
                            </Grid.RowDefinitions>
                            <TextBlock x:Name="MenuName" Margin="0,5,0,0" TextWrapping="Wrap" Text="{TemplateBinding Content}" VerticalAlignment="Center" d:LayoutOverrides="Width, Height" Grid.Row="1" HorizontalAlignment="Center" Foreground="#FF6382CD" FontSize="26.667" FontWeight="Bold"/>
                            <TextBlock x:Name="MenuNum" Margin="0,5,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Center" d:LayoutOverrides="Width, Height" Grid.Row="2" HorizontalAlignment="Center" Foreground="#FFA5A5A5" FontSize="20" />
                            <Image x:Name="Img" Height="150" Source="{TemplateBinding common:ControlAttachProperty.BgImg}" Stretch="Uniform"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Source" TargetName="MenuBtn" Value="{TemplateBinding common:ControlAttachProperty.BgImg}"/>
                                <Setter Property="Foreground" Value="#FFFAC952" TargetName="MenuName"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
C#+wpf模板升级封装版,总结运动控制路径算法而写,控件源码+模板源码,分享给想入行的朋友们,引你快速入行,大神略过,可用于激光切割,雕刻机,分板机,点胶机,插件机等,本模板主要考虑到各运动控制硬件不同,视觉应用功能(应用视觉软件)也不同,所以只开发各路径编辑功能,除此功能外请自行添加 主要功能如1~9描述了: 1:鼠标画点,线,圆,圆弧,椭圆,折线,矩形,多边形,工作矩形 2:用运动轴坐标画点,线,圆,圆弧,椭圆,折线,矩形,多边形,工作矩形 3: 鼠标编辑画点,线,圆,圆弧,折线,矩形,多边形,工作矩形 4:实现一些坐标调整工具等 5: 运动轨迹跟踪 6: 支持中文,数字,字符转路径,字符转一维二维码路径 7: 支持打开CAD的dxf文件并解析显示路径 8: 支持生成G代码,txt文本,CSV表格,NC文件 9: 模板已有模拟运行,自行添加板卡驱动运行坐标即可,因考虑到各项目板卡不同,所以暂不集成板卡 重点:绘图控件(重在控件模板在于用法,也可在此基础上用于项目,控件可以继续添加自已想要的功能 。
基于C#和WPF的通用运动控制路径算法框架:适用于激光切割、雕刻等多功能机器控制,含视觉应用路径编辑工具集及中文字符转路径功能。,C#+wpf界面源码框架,总结运动控制路径算法而写,控件源码+模板源码,分享给想入行的朋友们,引你快速入行,大神略过,可用于激光切割,雕刻机,分板机,点胶机,插件机等,本模板主要考虑到各运动控制硬件不同,视觉应用功能(应用视觉软件)也不同,所以只开发各路径编辑功能,除此功能外请自行添加 主要功能如1~9描述了: 1:鼠标画点,线,圆,圆弧,椭圆,折线,矩形,多边形,工作矩形 2:用运动轴坐标画点,线,圆,圆弧,椭圆,折线,矩形,多边形,工作矩形 3: 鼠标编辑画点,线,圆,圆弧,折线,矩形,多边形,工作矩形 4:实现一些坐标调整工具等 5: 运动轨迹跟踪 6: 支持中文,数字,字符转路径,字符转一维二维码路径 7: 支持打开CAD的dxf文件并解析显示路径 8: 支持生成G代码,txt文本,CSV表格,NC文件 9: 模板已有模拟运行,自行添加板卡驱动运行坐标即可,因考虑到各项目板卡不同,所以暂不集成板卡 重点:绘图控件(重在控件模板在于用法,

8,757

社区成员

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

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