我正在编写一个WPF应用程序,有时我必须指出应用程序正忙,我想将光标设置为Wait
(spinny事物),但我也想要普遍禁用与应用程序。
这适用于将光标设置为Wait
:
<UserControl.Style>
<Style TargetType="UserControl">
<Style.Triggers>
<DataTrigger Binding="{Binding IsBusy}" Value="True">
<Setter Property="ForceCursor" Value="True"/>
<Setter Property="Cursor" Value="Wait"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsBusy}" Value="False">
<Setter Property="ForceCursor" Value="False"/>
<Setter Property="Cursor" Value="{x:Null}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Style>
但是当我尝试通过更改IsHitTestVisible来禁用整个应用程序时:
<DataTrigger Binding="{Binding IsBusy}" Value="True">
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="Cursor" Value="Wait"/>
<Setter Property="ForceCursor" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsBusy}" Value="False">
<Setter Property="IsHitTestVisible" Value="True"/>
<Setter Property="Cursor" Value="{x:Null}"/>
<Setter Property="ForceCursor" Value="False"/>
</DataTrigger>
如果我使用IsEnabled
代替IsHitTestVisible
据我了解,如果控件没有“点击可见”,它就不会设置光标,但我想不出一个很好的解决方法。
答案 0 :(得分:1)
正如您注意到将IsHitTestVisible
设置为true
时,如果鼠标不在其上,则不允许您的窗口知道。因此,窗口不知道何时应该更改光标指示器。
然后我建议您使用解决方法:只需将Border
放在窗口内容上,然后让这个边框决定用户界面何时繁忙或不
这就是我的意思:在你的窗口中使用这个XAML
<Window x:Class="Application.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="400">
<Grid>
<Border Background="Transparent" BorderThickness="0"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Panel.ZIndex="100">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding IsBusy}" Value="True">
<Setter Property="Visibility" Value="Visible" />
<Setter Property="Cursor" Value="Wait" />
<Setter Property="ForceCursor" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding IsBusy}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
<Setter Property="Cursor" Value="Wait" />
<Setter Property="ForceCursor" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<StackPanel Orientation="Horizontal">
<!-- Your Controls, i.e. your window's content -->
</StackPanel>
</Grid>
</Window>
正如您所看到的,Border
的{{1}}比其他窗口的内容高ZIndex
。当绑定属性IsBusy
为true
时,Border
可见,并且不允许用户与窗口控件进行交互。
如果IsBusy
为false
,则Border
会折叠,一切正常。