如何在XAML中的Window之前声明资源?

时间:2017-07-04 14:55:34

标签: c# wpf mvvm data-binding mvvm-light

我的代码:

<Window ...
    Title="Notification" Height="90" Width="300" ResizeMode="NoResize" WindowStyle="None" DataContext="{Binding Notification, Source={StaticResource Locator}}" Opacity="{Binding TransitionOpacity}" Left="{Binding LeftMargin}" Top="{Binding TopMargin}"  Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibility}}">
<Window.Resources>
    <local:BoolToVisibleOrHidden x:Key="BoolToVisibility" />
</Window.Resources>
    <Grid Background="#FF3C4759">
    ...
</Window>

编译时我得到异常 System.Windows.Markup.XamlParseException 并在更改代码后

<Window ...
    Title="Notification" Height="90" Width="300" ResizeMode="NoResize" WindowStyle="None" DataContext="{Binding Notification, Source={StaticResource Locator}}" Opacity="{Binding TransitionOpacity}"  Left="{Binding LeftMargin}" Top="{Binding TopMargin}" >
<Window.Resources>
    <local:BoolToVisibleOrHidden x:Key="BoolToVisibility" />
</Window.Resources>
    <Grid Background="#FF3C4759" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibility}}">
    ...
</Window>

它可以工作,但我想设置窗口可见性而不是网格。

1 个答案:

答案 0 :(得分:1)

在这种情况下,绑定窗口可见性可能不是一个好主意。如果您有一段时间后想要隐藏的通知 - 只需关闭它(Close())而不是隐藏。

如果您仍然想要这样做 - 将转换器放入您的应用程序(App.xaml文件)。然后,您将能够在Window.Visibility绑定中使用它。截至目前 - 窗口Visibility属性在 Window.Resources初始化之前设置为,因此您无法使用Window.Resources内创建的转换器。

替代方法是像这样设置Visibility

<Window.Resources>
    <local:BoolToVisibleOrHidden x:Key="BoolToVisibility" />
</Window.Resources>
<Window.Visibility>
    <Binding Path="IsVisible" Converter="{StaticResource BoolToVisibility}" />
</Window.Visibility>