Получить доступ к методу codebehind из словаря ресурсов в WPF

У меня есть следующая сетка внутри XML-файла WPF

<Grid Grid.RowSpan="2" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height = "Auto" />
    </Grid.RowDefinitions >

    <telerik:RadAutoCompleteBox TextSearchMode = "Contains" Grid.Column= "0" Grid.Row= "0" Name="cmbStyleNo" Margin= "5"
                                 DisplayMemberPath="SAMPLE_ID"  ItemsSource="{Binding Styles}"
                                 SelectionMode= "Single" AutoCompleteMode= "Suggest" NoResultsContent= "No Matches" SelectionChanged= "val_SelectionChanged" />
</Grid >

выше RadAutoCompleteBox SelectionChanged = "val_SelectionChanged" код метода существует в его файле с выделенным кодом следующим образом

private void val_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ...
}

Тогда у меня есть требование заполнить выше ту же сетку в другом окне, используя словарь ресурсов. поэтому я скопировал эту сетку в ResourceDictionary следующим образом

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:samplePrjkt"
                    xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">

    <ToolBar x:Key="MyToolbar" Height="120">
        <!--Template-->
        <GroupBox Header="Template" Style="{StaticResource ToolbarGroup}" Margin="3">
            <StackPanel Grid.Row="1" Orientation="Horizontal">
                <StackPanel Orientation="Vertical" Margin="0,2,0,2">

                      <Grid Grid.RowSpan="2" >
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>

                <telerik:RadAutoCompleteBox TextSearchMode="Contains" Grid.Column="0" Grid.Row="0" Name="cmbStyleNo" Margin="5" 
                                     DisplayMemberPath="SAMPLE_ID"  ItemsSource="{Binding Styles}" 
                                     SelectionMode="Single" AutoCompleteMode="Suggest" NoResultsContent="No Matches" SelectionChanged="val_SelectionChanged"/>
            </Grid>
                </StackPanel>
            </StackPanel>
        </GroupBox>
    </ToolBar>
</ResourceDictionary>

затем, как только я скомпилирую это, я получаю следующую ошибку

Корневой элемент ResourceDictionary требует атрибута a x:Class для поддержки обработчиков событий в файле XAML. Либо удалите обработчик события для события SelectionChanged, либо добавьте атрибут a x:Class в корневой элемент.

1 ответ

Вам нужно вручную добавить файл с выделенным кодом для ResourceDictionary и определить val_SelectionChanged обработчик событий в этом файле.

Пожалуйста, обратитесь к следующей ссылке для получения дополнительной информации и пример того, как это сделать:

Можно ли установить код позади словаря ресурсов в WPF для обработки событий?

Вы просто создаете новый класс и называете его "Dictionary1.xaml.cs", где "Dictionary1" - это имя файла XAML словаря ресурсов, а затем вы устанавливаете x:Class атрибут в файле XAML:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                x:Class="WpfApplication1.Dictionary1"
...
Другие вопросы по тегам