如何在窗口标题中设置StaticResource绑定

时间:2013-11-08 10:52:55

标签: wpf binding staticresource

我想在绑定到窗口标题时放置IValueConverter,以便在活动项目更改时更改。问题是值转换器是一个静态资源,以后只加载几行:

<Window x:Class="MyProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyProject"
        Height="600" Width="800" VerticalAlignment="Stretch"
        Title="{Binding ActiveProject, Converter={StaticResource windowTitleConverter}},  UpdateSourceTrigger=PropertyChanged">
     <Window.Resources>
         <local:MainWindowTitleConverter x:Key="windowTitleConverter"/>
     </Window.Resources>

     <!-- Rest of the design -->
</Window>

然后是转换器的定义:

public class MainWindowTitleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null) return "Programme"; else return "Programme: " + (value as string);
    }

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

这会崩溃,大概是因为StaticResource尚未加载(我想不出任何其他原因),因为没有转换器它可以正常工作。但是,我无法改变顺序。我试图将它放在<Window.Title>标记中,但是我放在该标记内的任何内容都会产生编译错误。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:16)

只需使用更详细的定义

xmlns:System="clr-namespace:System;assembly=mscorlib"

...

<Window.Resources>
    <local:MainWindowTitleConverter x:Key="windowTitleConverter"/>
    ...
</Window.Resources>
<Window.Title>
    <Binding Path="ActiveProject">
        <Binding.Converter>
            <StaticResource ResourceKey="windowTitleConverter" />
        </Binding.Converter>
    </Binding>
</Window.Title>

我现在无法测试这个,但它应该可以工作。

答案 1 :(得分:-2)

正确的方法是将转换器放在app.xaml