如何动态更改按钮模板WPF

2024-02-20

我怎样才能改变一个Button模板动态?

我有一个ComboBox通过更改他选择的值,我想更改Button Template。 这就是我一直在努力做的事情:

<Window.Resources>
    <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
        <Grid>
            <Rectangle Fill="#FF2D2D7A" Margin="7.5,9.5,8.5,11" Stroke="Black"
                       RadiusX="45" RadiusY="45" StrokeThickness="6"/>
        </Grid>
    </ControlTemplate>
    <ControlTemplate x:Key="ButtonControlTemplate2" TargetType="{x:Type Button}">
        <Grid>
            <ed:RegularPolygon Fill="#FFE7F9C9" Height="Auto" InnerRadius="0.47211"
                               Margin="20.5,16,15.5,8" PointCount="5" Stretch="Fill"
                               Stroke="Black" StrokeThickness="6" Width="Auto"/>
        </Grid>
    </ControlTemplate>
</Window.Resources>

<Grid x:Name="LayoutRoot">
    <ComboBox Name="GroupBoxHeaderComboBox" ItemsSource="{Binding Path=collection}" 
              DisplayMemberPath="Key" Height="52" Margin="211.5,60,230.5,0"
              VerticalAlignment="Top" SelectedIndex="1"/>
    <Button Content="Button" HorizontalAlignment="Left" Height="102" Margin="47.5,0,0,91"
            VerticalAlignment="Bottom" Width="132"
            Template="{DynamicResource ButtonControlTemplate2}"/>
    <Button Content="Button" HorizontalAlignment="Right" Height="112.5" Margin="0,0,27.5,85"
            VerticalAlignment="Bottom" Width="153"
            Template="{DynamicResource ButtonControlTemplate1}"/>
    <Button Content="Button" Height="102" Margin="239.5,0,252.5,13.5"
            VerticalAlignment="Bottom"
            Template="{Binding ElementName=GroupBoxHeaderComboBox, Path=SelectedItem.Value}"/>
</Grid>

这是相关的Templates:

<Window.Resources>
    <ControlTemplate x:Key="ButtonControlTemplate1" TargetType="{x:Type Button}">
        <Grid>
            <Rectangle Fill="#FF2D2D7A" Margin="7.5,9.5,8.5,11" Stroke="Black"
                       RadiusX="45" RadiusY="45" StrokeThickness="6"/>
        </Grid>
    </ControlTemplate>
    <ControlTemplate x:Key="ButtonControlTemplate2" TargetType="{x:Type Button}">
        <Grid>
            <ed:RegularPolygon Fill="#FFE7F9C9" Height="Auto" InnerRadius="0.47211"
                               Margin="20.5,16,15.5,8" PointCount="5" Stretch="Fill"
                               Stroke="Black" StrokeThickness="6" Width="Auto"/>
        </Grid>
    </ControlTemplate>
</Window.Resources>

以及背后的代码:

public partial class MainWindow : Window
{
    public Dictionary<string, string> collection
    {
        get;
        private set;
    }

    public MainWindow()
    {
        this.InitializeComponent();
        DataContext = this;
        collection = new Dictionary<string, string>() 
        {
            { "DynamicResource ButtonControlTemplate2", "{DynamicResource ButtonControlTemplate2}"},
            { "DynamicResource ButtonControlTemplate1", "{DynamicResource ButtonControlTemplate2}"},

        };
    // Insert code required on object creation below this point.
    }
}

是否有另一种通用方法来完成此任务?...我希望大部分代码都是 xaml。

EDIT:

使用样式来做到这一点有什么意义吗?假设我想要多个对象执行操作,否则是否有必要更改样式并从那里开始执行所有操作?


    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = this;
        }

        public Dictionary<string, ControlTemplate> collection
        {
            get
            {
                Dictionary<string, ControlTemplate> controlTemplates = new Dictionary<string, ControlTemplate>();
                controlTemplates.Add("ButtonControlTemplate1", FindResource("ButtonControlTemplate1") as ControlTemplate);
                controlTemplates.Add("ButtonControlTemplate2", FindResource("ButtonControlTemplate2") as ControlTemplate);
                return controlTemplates;
            }
        } 
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何动态更改按钮模板WPF 的相关文章

  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 访问 XAML 中的静态字段

    如何在 xaml 中引用类的静态属性 换句话说 我想做这样的事情 Class BaseThingy public static readonly Style BaseStyle
  • 依赖属性回调不起作用

    我有以下代码 private static readonly DependencyProperty IDProperty DependencyProperty Register ID typeof int typeof DetailData
  • 如何在控件内引用用户控件主机的 StaticResource?

    我有以下内容StaticResource in my Window Resources
  • 如何在qt中创建正确的退出按钮

    我正在尝试创建一个退出按钮来正确关闭我在 QT 中制作的 GUI 我尝试通过以下方式执行此操作 include
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • WPF 4.0 InvokeCommandAction 兼容性 (System.Windows.Interactivity)

    当我在 WPF 4 0 中插入 InvokeCommandAction Blend 4 SDK 时遇到问题 用户控件未显示 并且我遇到了一些例外情况 登录底部 如果我的 xaml 代码中没有该行 就没有问题 但没有事件触发器 我已经在外部灯
  • 以编程方式更改 StackPanel 在 Canvas 上的位置

    我在画布上有堆栈面板 堆栈面板有
  • TinyMCE 的 addButton() 函数中所有可能的设置属性是什么?

    The 文档 http www tinymce com wiki php API3 method tinymce Editor addButton对此还不是很清楚 name 字符串 要添加的按钮名称 设置 对象 带有标题 cmd 的设置对象
  • 使用路径=。和绑定内的转换器

    我无法为 TreeViewItems 定义触发器 我相信这只是一些语法问题 但我不知道还要写什么 这是触发器
  • 将 RoutedEvent 转换为 WPF 中 MVVM 模式的命令

    如何将 Checkbox checked 路由事件转换为 MVVM 模式的命令 参考 考虑按钮单击路由事件 当我们为按钮分配命令时 button click 事件被视为命令 它执行相应的命令 我用谷歌搜索了它 我得到了 EventBehav
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • WPF:动画不流畅

    我正在制作一个动画TextBlock 60秒后增加FontSize从 8 点到 200 点 一切工作正常 除了我的动画随着文本的增长而上下移动 为什么会发生这种情况 是否可以避免这种情况 我有一个非常简单的 XAML 文件
  • INotifyPropertyChanged 和线程

    我有一个基类实现INotifyPropertyChanged protected void OnNotifyChanged string pName if PropertyChanged null PropertyChanged this
  • 设置 Wpf 饼图样式

    这是我的饼图 xaml
  • 为什么在此 MultiBinding 上未调用 ConvertBack?

    我的组合框列表联系人使用 MultiBinding 绑定到 FullName 和 PhoneExtension IMul tiValueConverter 的 Convert 方法被调用 但 ConvertBack 未被调用 为什么 组合框
  • 删除窗口的背景图像 WPF

    我在 WPF 中遇到问题 其中窗口在关闭后 应用程序的另一部分尝试写入图像之前不会释放其对背景图像文件的文件锁定 举个例子 假设我有一个 WPF 应用程序 由 3 个窗口 1 个 菜单 选择窗口和另外 2 个窗口组成 两个窗口都会创建一个I
  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root

随机推荐

  • 使用聚合初始化初始化基类子对象时复制省略

    在下面的代码中 struct B是一个有碱基的聚合体struct A and B 对象是聚合初始化的B b A include
  • UDP 数据报中发送的消息未经过净化?

    我的代码如下 一切都按照我想要的方式进行 但是当我的消息收到时 它们的末尾有很多框 有点像这样 消息 你好 如何才能让接收和打印的内容仅为 Message hello 我非常感谢任何帮助 import java io import java
  • 如何使用摄影测量或 LiDAR 创建 3D 扫描 ios 应用程序?

    我想使用摄影测量或 LiDAR 创建自己的 3D 扫描应用程序 我希望能够精确地扫描小物体 您能指导我从头开始创建这样的应用程序吗 我尝试搜索如何使用统一来做到这一点 但我找不到它 我想要一个能够进行 3D 扫描的 IOS 应用程序 当谈到
  • 如何在 Excel 宏中使用 JavaScript?

    Google 托管了一个非常酷的 diff 类 http code google com p google diff match patch http code google com p google diff match patch 我之
  • JNA 如何在要传递到本机库的结构中填充结构指针字段?

    我需要将 JNA 结构传递到包含结构指针字段 可能包含零个或多个结构 的本机层 这是 父 结构 public class VkRenderPassCreateInfo extends Structure public int attachm
  • 在 Symfony 中,如何在开发环境中要求 http,在生产环境中要求 https?

    在生产中 我有一组需要 SSL 的路由 但这不应该是开发的要求 我以为我可以简单地覆盖我的路线routing dev yml但这似乎不起作用 当导航到任何路线时 它会强制使用 https 我的设置 应用程序 配置 routing dev y
  • 比较器最佳实践

    如果我实现自定义比较器 重写是否被认为是好的做法equals除了compare 此外 是否有一份明确的合同Comparator Comparator合约定义在它的javadoc中 http docs oracle com javase 7
  • 如何替换Python字符串中的占位符

    如果我在Python中有一个这样的字符串 我该如何填充占位符 s uri1 s file1 txt md5 s uri2 s file2 txt md5 s uri3 s file3 txt md5 s The uri然而 将保持不变 md
  • 为什么我无法使用 NodeJS 解密使用 openssl 加密的文件?

    我使用命令行加密了一个文件 openssl aes 256 cbc in tmp text txt out tmp text crypt 然后我尝试使用以下 JavaScript 代码对其进行解密 crypto require crypto
  • Rails 3 在所有表单上去除 before_validation 的空格

    我对 Rails 比较陌生 有点惊讶这不是一种可配置的行为 至少我还没有找到一个 我本以为 99 的表单都会受益于修剪所有表单中的空白string text领域 我猜我错了 无论如何 我正在寻找一种 DRY 方法来从 Rails 3 应用程
  • 使用 Seaborn 和 Matplotlib 对齐热图和线图的共享子图中的 x 轴刻度

    绘制一个热图和线图使用具有共享 x 轴的 Seaborn 热图的刻度被放置在热图条的中间 因此 底部线图将继承热图刻度位置和标签 而不反映真实数据 因为线图刻度应从零开始 换句话说 我需要将两个图的刻度移动到从 x 轴原点开始 最佳 或者将
  • 在子进程中使用信号

    我想创建一个简单的程序 它使用 fork 并创建一个子进程 该子进程使用暂停正在等待 我希望这个子进程在从父进程收到特定信号后启动 我写的代码 include
  • 从第三方网站 POST 后丢失会话数据

    我有一个 Laravel 网站 它重定向到支付提供商 外部第三方网站 当用户完成付款后 他们会通过 POST 请求重定向回我的网站 我遇到的问题是 当用户返回确认页面时 他们的会话会丢失 我想知道这是否是 PHP 的普遍行为 但它似乎是 L
  • Android Studio 3 中的“活动管理器状态”在哪里?

    Android studio 2 x 中有一个非常方便的调试功能 但目前 3 x 中没有 它有点隐藏在用户界面中 然后它会提示详细的活动管理器状态 我知道 我可以通过以下方式获取该输出adb shell dumpsys activity t
  • Google Data Studio:如何计算特定事件的数量

    我知道以前有人问过类似的问题 但我没有找到答案 例子在这里 https support google com datastudio thread 22779471 hl en 另一个例子 https stackoverflow com qu
  • 在 Ubuntu 16.04 上安装 Oracle Datamodeler

    我正在我的 Ubuntu 16 04 工作站上设置 Oracle 开发环境 安装 Oracle 12c 是一个挑战 但有几个非常有用的教程让我走上了正轨 下列的迪兹韦尔的 https www dizwell com wordpress te
  • 从 Outlook 获取收件箱

    我在 Outlook 2010 中配置了两个 Exchange 帐户 但是我无法找到如何访问第二个帐户的收件箱 Session GetDefaultFolder 总是返回第一个 甚至枚举 Session Accounts 找到正确的帐户并调
  • for 循环缺少初始化

    我见过 for and for s 0 s 怎么就这样空白了 谢谢 The for声明的工作原理如下 for initialization test condition update 这三个中的任何一个或全部都可以省略 留空 所以 for
  • Eclipse源代码下载[已关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在新的 Eclipse 中 我们具有右键单击 XSD 并从中生成 XML 的功能 有人可以指导我在哪里可以获得 Eclipse 此功能的源代码吗 我猜
  • 如何动态更改按钮模板WPF

    我怎样才能改变一个Button模板动态 我有一个ComboBox通过更改他选择的值 我想更改Button Template 这就是我一直在努力做的事情