1

RibbonTabのタイプに基づいて選択する必要がある人をいくつか取得しContentましたTabControl

問題は、時々動作しないことです。Windows 7 を搭載したメイン コンピューターよりも、リモートの Windows XP でエラーが頻繁に発生するようです (遅いためかもしれません)。エラーが発生した場合、タブを再度切り替えても役に立たず、同じ を共有するどのビューでも機能しませんIValueConverter

<ribbon:RibbonWindow Title="{Binding DisplayName}"
    x:Name="RibbonWindow"
    x:Class="Abc.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
    xmlns:c="clr-namespace:Abc.Converters">
<ribbon:RibbonWindow.Resources>
    <c:FoobarConverter x:Key="Foobar" />
    <c:FooConverter x:Key="Foo" />
    <c:BarConverter x:Key="Bar" />
</ribbon:RibbonWindow.Resources>
<DockPanel>
    <ribbon:Ribbon DockPanel.Dock="Top">
        <a:FoobarRibbonTab IsSelected="{Binding SelectedTab, Mode=OneWay, Converter={StaticResource Foobar}}" />
        <a:FooRibbonTab IsSelected="{Binding SelectedTab, Mode=OneWay, Converter={StaticResource Foo}}" />
        <a:BarRibbonTab IsSelected="{Binding SelectedTab, Mode=OneWay, Converter={StaticResource Bar}}" />
    </ribbon:Ribbon>
    <TabControl ItemsSource="{Binding Tabs}"
                SelectedItem="{Binding SelectedTab}"/>
</DockPanel>

public class FooConverter : IValueConverter
{
    public List<Type> ValidTypes = new List<Type>();

    public FooConverter()
    {
        ValidTypes = new List<Type>
        {
            typeof(FooView),
            // etc...
        };
    }

    public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var tabItemBase = value as TabItemBase;

        return tabItemBase != null && tabItemBase.Content != null && ValidTypes.Contains(tabItemBase.Content.GetType());
    }

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

アップデート

それぞれRibbonTabが独自のものを持ちConverter、それぞれが 1 つのViewにのみ存在しConverterます。使用Ctrl + Tabするとエラーが先に発生します。

4

0 に答える 0