当前位置: 首页 > article >正文

wpf mvvm 数据绑定数据(按钮文字表头都可以),根据长度进行换行,并把换行的文字居中

今天遇到了一个问题,就是数据表头按钮的文字换行后不能居中,如何查找资料后,也是挺简单的,就是绑定控件的文字,进行进行操作,下来我们以按钮为例。

在WPF中使用MVVM模式时,可以通过绑定按钮的文字,并根据文字长度进行换行,同时确保文字居中显示。这通常涉及到自定义控件模板和样式,以及使用数据绑定来动态设置按钮的内容。

以下是一个示例,展示了如何实现这一功能:

定义ViewModel:

首先,定义一个ViewModel,它包含按钮的文本属性。

using System.ComponentModel;
using System.Runtime.CompilerServices;
 
public class MainViewModel : INotifyPropertyChanged
{
    private string _buttonText;
 
    public string ButtonText
    {
        get { return _buttonText; }
        set
        {
            _buttonText = value;
            OnPropertyChanged();
        }
    }
 
    public MainViewModel()
    {
        ButtonText = "这是一个非常长的按钮文字,需要进行换行处理,并居中显示。";
    }
 
    public event PropertyChangedEventHandler PropertyChanged;
 
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

定义View:

在XAML中定义按钮,并使用数据绑定来设置按钮的内容。为了处理换行和居中,你可以使用TextBlock作为按钮的内容,并设置相应的样式。

<Window x:Class="WpfApp.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"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="400">
    <Window.DataContext>
        <local:MainViewModel />
    </Window.DataContext>
    <Grid>
        <Button Width="200" Height="100" HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button.Content>
                <TextBlock TextWrapping="Wrap"
                           TextAlignment="Center"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Center"
                           Text="{Binding ButtonText}"
                           Margin="10"/>
            </Button.Content>
            <Button.Template>
                <ControlTemplate TargetType="Button">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <ContentPresenter HorizontalAlignment="Center"
                                          VerticalAlignment="Center"
                                          Content="{TemplateBinding Content}"
                                          RecognizesAccessKey="True"/>
                    </Border>
                </ControlTemplate>
            </Button.Template>
        </Button>
    </Grid>
</Window>

在这个示例中:

  • TextBlock 被用作按钮的内容,并设置了 TextWrapping=“Wrap” 和 TextAlignment=“Center” 来实现换行和居中。
  • Margin 属性被添加到 TextBlock 上,以确保文本不会紧贴按钮边框。
  • 自定义了按钮的 ControlTemplate,以确保内容(即 TextBlock)在按钮内部居中显示。

运行应用:

运行你的WPF应用,你应该会看到一个按钮,其文字根据长度自动换行,并且文字在按钮内部居中显示。
这个示例展示了如何在MVVM模式下,通过数据绑定和自定义控件模板来实现按钮文字的换行和居中显示。你可以根据需要进一步调整样式和布局。
是不是很简单,我们只需要根据自己的需求进行修好


http://www.kler.cn/a/446482.html

相关文章:

  • 海外外卖APP开发新方向:基于同城外卖系统源码的多元化解决方案
  • Golong中无缓冲的 channel 和 有缓冲的 channel 的区别
  • 批处理理解
  • 【返璞归真】score检验:似然比的得分检验(Likelihood Ratio Score Test)
  • 【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器
  • 【C语言】特殊指针汇总
  • 利用Python爬虫快速获取商品历史价格信息
  • SSM+Vue 驱动的电脑测评系统:诠释科技评测新高度
  • 开源云原生数据仓库ByConity ELT 的测试体验
  • [每周一更]-(第128期):CentOS源码安装PostgreSQL
  • vue-router的详细安装及配置
  • 2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题
  • 12.13-12.21 刷题汇总
  • 活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享
  • 用SparkSQL和PySpark完成按时间字段顺序将字符串字段中的值组合在一起分组显示
  • mac 安装graalvm
  • 【Http,Netty,Socket,WebSocket的应用场景和区别】
  • CESS 出席华盛顿区块链政策峰会:参与国家安全与数据隐私保护专题讨论
  • BOE(京东方)“向新2025”年终媒体智享会首站落地上海 六大维度创新开启产业发展新篇章
  • 【HTML】DOCTYPE的作用?
  • SAP RESTful架构和OData协议
  • 微信小程序之今日热搜新闻
  • 【论文速读】| FirmRCA:面向 ARM 嵌入式固件的后模糊测试分析,并实现高效的基于事件的故障定位
  • 推送本地仓库到远程git仓库
  • 问题解决:发现Excel中的部分内容有问题。是否让我们尽量尝试恢复? 如果您信任此工作簿的源,请单击“是”。
  • 解析基于 SSM 框架 Vue 电脑测评系统:把握电脑测评精髓