Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML:can';“t集”;“窗口”;具有setter或触发器的属性_C#_Wpf_Xaml - Fatal编程技术网

C# XAML:can';“t集”;“窗口”;具有setter或触发器的属性

C# XAML:can';“t集”;“窗口”;具有setter或触发器的属性,c#,wpf,xaml,C#,Wpf,Xaml,在WPF应用程序中,我很难从XAML端设置窗口的高度(如果我在代码隐藏中设置窗口,它会起作用,但我想在XAML中执行所有操作)。 这是一个非常基本的应用程序:您单击一个按钮,该按钮将被禁用,进度条将显示5秒(以下代码中不处理进度条)。 由于“代码隐藏”中的一个变量,我成功地在单击按钮时禁用了to按钮,但是窗口的相同机制不起作用。 我的代码很简单: 使用System.ComponentModel; 使用System.Threading.Tasks; 使用System.Windows; 命名空间Wp

在WPF应用程序中,我很难从XAML端设置
窗口的高度(如果我在代码隐藏中设置窗口,它会起作用,但我想在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
属性被忽略了)。