C# XAML:can';“t集”;“窗口”;具有setter或触发器的属性
在WPF应用程序中,我很难从XAML端设置C# XAML:can';“t集”;“窗口”;具有setter或触发器的属性,c#,wpf,xaml,C#,Wpf,Xaml,在WPF应用程序中,我很难从XAML端设置窗口的高度(如果我在代码隐藏中设置窗口,它会起作用,但我想在XAML中执行所有操作)。 这是一个非常基本的应用程序:您单击一个按钮,该按钮将被禁用,进度条将显示5秒(以下代码中不处理进度条)。 由于“代码隐藏”中的一个变量,我成功地在单击按钮时禁用了to按钮,但是窗口的相同机制不起作用。 我的代码很简单: 使用System.ComponentModel; 使用System.Threading.Tasks; 使用System.Windows; 命名空间Wp
窗口的高度(如果我在代码隐藏中设置窗口,它会起作用,但我想在XAML中执行所有操作)。
这是一个非常基本的应用程序:您单击一个按钮,该按钮将被禁用,进度条将显示5秒(以下代码中不处理进度条)。
由于“代码隐藏”中的一个变量,我成功地在单击按钮时禁用了to按钮,但是窗口的相同机制不起作用。
我的代码很简单:
使用System.ComponentModel;
使用System.Threading.Tasks;
使用System.Windows;
命名空间WpfProgressBarXaml
{
公共部分类主窗口:窗口,INotifyPropertyChanged
{
私人住宅正在等待;
///属性,指示程序是否处于等待模式。
公共图书馆正在等待
{
获取{返回此。\u正在等待;}
设置
{
这个。_IsWaiting=value;
OnPropertyChanged(“IsWaiting”);
}
}
公共主窗口()
{
IsWaiting=false;
DataContext=this;
初始化组件();
}
公共事件属性更改事件处理程序属性更改;
受保护的void OnPropertyChanged(字符串属性)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(property));
}
专用异步无效按钮\u单击(对象发送方,路由目标)
{
IsWaiting=true;
等待任务。延迟(5000);
IsWaiting=false;
}
}
}
还有我的XAML:
正如我所说,按钮被禁用的部分可以工作。但是,对于窗口
的相同机制没有任何作用。
即使如此,第一个
应该将窗口设置为所需的高度,但如果我将其设置为200,则窗口仍然保持其原来的高度120。
知道为什么吗?谢谢。您应该将窗口属性SizeToContent更改为“宽度和高度”如果您在数据触发器中更改最小高度
并将窗口的大小设置为内容
至少设置为高度
或宽度和高度
,则可以更改高度
<Style.Triggers>
<DataTrigger Binding="{Binding IsWaiting}" Value="True">
<Setter Property="MinHeight" Value="150" />
</DataTrigger>
<DataTrigger Binding="{Binding IsWaiting}" Value="False">
<Setter Property="MinHeight" Value="120" />
</DataTrigger>
</Style.Triggers>
您正在为窗口设置本地值Height=“120”
。本地值的优先级高于其他值,例如来自setter(
)。删除Height=“120”
属性
按钮的样式工作正常,因为IsEnabled仅通过setter设置
还有数据触发器
<DataTrigger Binding="{Binding IsWaiting}" Value="False">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
是一种开销,可以删除,因为它只是重复默认的setter
<Setter Property="IsEnabled" Value="True" />
没有。如果我在窗口
中删除高度
和宽度
,并添加此属性,则设计器将显示
中设置的高度,但在运行时它仍然不起作用(最初和单击按钮后)。样式设置器可正确用于除宽度
和高度
之外的属性。解决方案似乎是您的答案的混合;我必须删除Height
和/或MinHeight
的本地值。然后,添加本地SizeToContent=“WidthAndHeight”
;之后,在窗口样式中设置MinHeight
,最后在DataTrigger
中操作MinHeight
。我还必须删除本地Height
值,但这个答案比另一个答案更完整、更相关(但无论如何,对于SizeToContent
属性,Height
属性被忽略了)。