7

我想将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> 标签中,但是我放在那个标签中的任何东西都会产生编译错误。这样做的正确方法是什么?

4

2 回答 2

19

只需使用更详细的定义

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>

我目前无法对此进行测试,但它应该可以工作。

于 2013-11-08T11:05:41.617 回答
-2

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

于 2013-11-08T11:04:44.800 回答