将Converter绑定到xaml中的父资源

时间:2018-10-17 08:56:03

标签: wpf xaml data-binding relativesource

我有一个usercontrol1.xaml,其中定义了资源:

install.packages("stringi", dependencies=TRUE, INSTALL_opts = c('--no-lock'))

然后在用户控制视图2中,我要遇到这种情况:

    <UserControl x:Class="FrameworkDemo.usercontrol1View">
       <UserControl.Resources>
           <local:DemoManger x:Key="demoManager"/>
            <local:DemoManagerConverterx x:Key="demoManagerConverter" Manager="{StaticResource strategyManager}"/>
        </UserControl.Resources>

     <telerik:RadTileView MinimizedItemsPosition="Top">
            <telerik:RadTileViewItem>
               <local:UserControl2View/>
            </telerik:RadTileViewItem>
            <telerik:RadTileViewItem>
                    ........
            </telerik:RadTileViewItem>
     </telerik:RadTileView>
    </UserControl>

我能够链接到 ItemSource 的父控件,但是对于转换器,我该怎么做?我无法将资源定义从control1移动到control2。 RadTileViewItem 内部无法添加其他资源。恰好在 usercontrol1View 中,我在 RadTileViewItem 中和 tabiteam 中都有一个 tabcontrol ,其中包括 UserControl2View

如何链接到covnerter的父资源?

2 个答案:

答案 0 :(得分:1)

  

如何链接到covnerter的父资源?

不能。如果您需要在两个UserControls中使用相同的转换器,则实际上是在错误的位置定义了资源。

您可以将其移动到您的App.xaml文件中:

<Application x:Class="WpfApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp1"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        ...
        <local:DemoManagerConverterx x:Key="demoManagerConverter" Manager="{StaticResource strategyManager}"/>
    </Application.Resources>
</Application>

然后,您将可以在整个应用程序中引用它。另一个选择是在UserControl2中定义另一个相同类型的资源:

<DockPanel>
    <DockPanel.Resources>
        <local:DemoManagerConverterx x:Key="demoManagerConverter" Manager="{StaticResource strategyManager}"/>
    </DockPanel.Resources>
    <ComboBox MinWidth="270" Margin="0,0,5,5"
                    ItemsSource="{Binding Path=Demos, RelativeSource={RelativeSource AncestorType={x:Type local:DemoManager}}}"
                    SelectedValue="{Binding Path=CurrentStrategy, Converter={StaticResource demoManagerConverter}, Mode=TwoWay}"
                    IsEnabled="{Binding CanRefreshExecutionList, ElementName=Instance}"
                    DropDownOpened="StrategyComboBox_DropDownOpened" />
</DockPanel>

但是您不能使用绑定引用在父元素中定义的资源。

答案 1 :(得分:0)

我想您想将转换器对象绑定到绑定的Converter属性。
您不能绑定到绑定的Converter属性,因为它不是“ DependencyProperty”。您可以访问资源对象并绑定它,例如到“标签”,但不能解决您的问题:

<ComboBox MinWidth="270" Margin="0,0,5,5"
        ItemsSource="{Binding Path=Demos, RelativeSource={RelativeSource AncestorType={x:Type local:DemoManager}}}"
        SelectedValue="{Binding Path=CurrentStrategy, Converter={ ????}, Mode=TwoWay}"
        Tag="{Binding Path='Resources[demoManagerConverter]', RelativeSource={RelativeSource AncestorType={x:Type localFrameworkDemo:usercontrol1View}}}"
        IsEnabled="{Binding CanRefreshExecutionList, ElementName=Instance}"
        DropDownOpened="StrategyComboBox_DropDownOpened">

如果对象是嵌套的,则只需将Converter设置(不绑定)到资源对象:

Converter = {StaticResource demoManagerConverter}