WPF中C#修改MaterialDesign按钮IsIndeterminate属性方法
问题原因
materialDesign:ButtonProgressAssist.IsIndeterminate属于WPF的附加属性,不属于Button控件自带的原生CLR属性,因此无法参照Content这类常规属性的直接赋值方式操作,你之前写的BTN_Search.materialDesign:ButtonProgressAssist.IsIndeterminate = true;本身就不符合C#语法规则,自然无法生效。
正确实现代码
首先确保后台代码文件已经引入MaterialDesign对应命名空间:
using MaterialDesignThemes.Wpf;
附加属性在C#后台的操作必须通过属性所属类提供的静态Set[属性名]/Get[属性名]方法完成,按钮点击事件的参考实现如下:
private async void Search_Click(object sender, RoutedEventArgs e) { // 开启按钮加载状态 ButtonProgressAssist.SetIsIndeterminate(BTN_Search, true); try { // 此处编写实际搜索业务逻辑,耗时操作必须用异步调用,避免阻塞UI线程导致动画不显示 // 示例:await Task.Run(() => { /* 你的耗时查询逻辑 */ }); } finally { // 业务执行完成后无论成功失败,都关闭加载状态 ButtonProgressAssist.SetIsIndeterminate(BTN_Search, false); } }
注意事项
- 所有XAML中以
宿主类名:属性名格式书写的属性都是附加属性,后台操作统一遵循宿主类.Set属性名(目标控件实例, 属性值)的赋值规则、宿主类.Get属性名(目标控件实例)的取值规则,不能直接通过控件实例点属性名赋值。 - 耗时业务逻辑不要直接写在UI线程同步执行,否则会阻塞UI渲染,即使正确设置了属性,加载动画也无法正常显示,必须配合
async/await做异步处理。
内容的提问来源于stack exchange,提问作者Pawel
相关产品推荐
相关产品推荐

