2016-02-13 54 views
0

我想通过转换器绑定WPF中窗口的可见性。我收到错误。 System.Windows.StaticResourceExtension System.Windows.StaticResourceExtension在'System.Windows.StaticResourceExtension'上提供值抛出异常

我下面提供我的代码。 我的看法是 enter image description here

<Window x:Class="UI.ChildWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:UI" 
    xmlns:UtilityValue="clr-namespace:UI.Utility" 
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"   
    mc:Ignorable="d" 
    Title="ChildWindow" Height="70" Width="400" WindowStartupLocation="CenterScreen" WindowStyle="None" 
    Visibility="{Binding WindowVisibility, Converter={StaticResource VisibilityConverter}, Mode=TwoWay}">  
<Window.Resources> 
    <UtilityValue:TextInputToVisibilityConverter x:Key="TextInputToVisibilityConverter"></UtilityValue:TextInputToVisibilityConverter> 
    <UtilityValue:EventToCommandBehavior x:Key="CommandBehavior"></UtilityValue:EventToCommandBehavior> 
    <SolidColorBrush x:Key="brushWatermarkBackground" Color="White" /> 
    <SolidColorBrush x:Key="brushWatermarkForeground" Color="LightSteelBlue" /> 
    <SolidColorBrush x:Key="brushWatermarkBorder" Color="Indigo" /> 
    <UtilityValue:BooleanToVisibilityConverter x:Key="VisibilityConverter"></UtilityValue:BooleanToVisibilityConverter>  
    <Style x:Key="EntryFieldStyle" TargetType="Grid" > 
     <Setter Property="HorizontalAlignment" Value="Stretch" /> 
     <Setter Property="VerticalAlignment" Value="Center" /> 
     <Setter Property="Margin" Value="2" /> 
    </Style> 
</Window.Resources> 

我的视图模型作为followes:

区域WindowVisibility

private bool _windowVisibility=true; 
    public bool WindowVisibility 
    { 
     get { return _windowVisibility; } 
     set { _windowVisibility = value; 
      OnPropertyChanged("WindowVisibility"); 
     } 
    } 

    #endregion 

Converter是

public class BooleanToVisibilityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (value != null) 
      { 
       if ((bool)value) 
        return Visibility.Visible; 
       else 
        return Visibility.Collapsed; 
      } 
      else 
       return Visibility.Collapsed; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

该转换器与其他控件,但与正常工作这个窗口我t不工作。 我想知道转换器的工作与窗口级别或只在控件?

+2

只是要注意,BooleanToVisibilityConverter已经存在,请参阅[MSDN](https://msdn.microsoft.com/en-us/library/system.windows。 controls.booleantovisibilityconverter%28v = vs.110%29.aspx) –

回答

1

Resources集合中转换器的声明应该在对转换器的引用之前。

你能解决这个问题是这样的:

<Window x:Class="UI.ChildWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:UI" 
     xmlns:UtilityValue="clr-namespace:UI.Utility" 
     xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"   
     mc:Ignorable="d" 
     Title="ChildWindow" Height="70" Width="400" WindowStartupLocation="CenterScreen" WindowStyle="None"> 
    <Window.Resources> 
     <UtilityValue:TextInputToVisibilityConverter x:Key="TextInputToVisibilityConverter"></UtilityValue:TextInputToVisibilityConverter> 
     <UtilityValue:EventToCommandBehavior x:Key="CommandBehavior"></UtilityValue:EventToCommandBehavior> 
     <SolidColorBrush x:Key="brushWatermarkBackground" Color="White" /> 
     <SolidColorBrush x:Key="brushWatermarkForeground" Color="LightSteelBlue" /> 
     <SolidColorBrush x:Key="brushWatermarkBorder" Color="Indigo" /> 
     <UtilityValue:BooleanToVisibilityConverter x:Key="VisibilityConverter"></UtilityValue:BooleanToVisibilityConverter> 
     <Style x:Key="EntryFieldStyle" TargetType="Grid" > 
      <Setter Property="HorizontalAlignment" Value="Stretch" /> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
      <Setter Property="Margin" Value="2" /> 
     </Style> 
    </Window.Resources> 

    <Window.Visibility> 
     <Binding Path="WindowVisibility" Converter="{StaticResource VisibilityConverter}" Mode="TwoWay" /> 
    </Window.Visibility> 
</Window> 
+0

谢谢你,谢谢@Szabolcs Dezsi –