Стиль WPF не находит ресурс конвертера во время работы приложения
Пишу приложение на C# NET 6.0 WPF. У меня есть такой словарь ресурсов:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:widget="clr-namespace:Example.Widget"
xmlns:util="clr-namespace:Example.Util">
<util:RadioSizeConverter x:Key="RadioSizeConverter"/>
<Style x:Key="RadioButtonStyle" TargetType="RadioButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid>
<Ellipse x:Name="outerCircle" Stroke="#DBDBDB" StrokeThickness="3" Fill="Transparent"
Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>
<Ellipse x:Name="innerCircle" Fill="Transparent">
<Ellipse.Width>
<Binding Path="ActualWidth" ElementName="outerCircle"
Converter="{StaticResource RadioSizeConverter}"/>
</Ellipse.Width>
<Ellipse.Height>
<Binding Path="ActualHeight" ElementName="outerCircle"
Converter="{StaticResource RadioSizeConverter}"/>
</Ellipse.Height>
</Ellipse>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="innerCircle" Property="Fill" Value="#F7BA0B"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="innerCircle" Property="Fill" Value="Transparent"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Как можно заметить, в нем используется конвертер. Вот класс конвертера:
public class RadioSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is double originalSize)
{
return originalSize * 0.75;
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Вот так я использую мой стиль:
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<RadioButton x:Name="one" Style="{StaticResource RadioButtonStyle}" Width="80" Height="80" GroupName="group1" Margin="0,0,10,0"/>
<RadioButton x:Name="two" IsChecked="True" Style="{StaticResource RadioButtonStyle}" Width="80" Height="80" GroupName="group1"/>
<RadioButton x:Name="three" Style="{StaticResource RadioButtonStyle}" Width="80" Height="80" GroupName="group1" Margin="10,0,0,0"/>
</StackPanel>
В визуальном редакторе это даже работает, но при запуске приложения выпадает исключение:
System.Windows.Markup.XamlParseException: ""Нельзя создать неизвестный тип "{clr-namespace:Example.Util}RadioSizeConverter".": номер строки "6" и позиция в строке "6"."
Почему так? Как сделать, чтобы работало? Я видел множество примеров, где так работает, не могу понять в чем проблема. Все неймспейсы, пути и названия верные, проверил несколько раз. Файл со стилем включен в сборку как ресурс.
Ответы (1 шт):
В комментарии дали ответ: нужно было указать namespace так:
xmlns:util="clr-namespace:Example.Util;assembly=Example"