Привязать конвертер к родительскому ресурсу в xaml - PullRequest
0 голосов
/ 17 октября 2018

У меня есть usercontrol1.xaml, где я определил ресурс:

    <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>

Затем в представлении управления пользователем 2 я хочу иметь следующую ситуацию:

ss
   <UserControl x:Class="FrameworkDemo.usercontrol2View">

    <DockPanel>
          <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}"
                    IsEnabled="{Binding CanRefreshExecutionList, ElementName=Instance}"
                    DropDownOpened="StrategyComboBox_DropDownOpened">
    </DockPanel>
    </UserControl>

Iбыл в состоянии связаться с родительским элементом управления для ItemSource , но для конвертера, как я могу это сделать ?.Я не могу событие переместить определение ресурса из control1 в control2.Внутри RadTileViewItem невозможно добавить другой ресурс.Именно в usercontrol1View у меня есть tabcontrol внутри RadTileViewItem и внутри tabiteam я включил UserControl2View .

Как мне связаться с родительским ресурсом для covnerter?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Как мне связаться с родительским ресурсом для 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>

Но вы не можете ссылаться на ресурс, определенный в родительском элементе, используя привязки.

0 голосов
/ 17 октября 2018

Полагаю, вы хотели привязать объект конвертера к свойству 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 = {StaticResource demoManagerConverter}
...