Получить доступ к методу 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"
...