问题是转换器不想在ResourceDictionary(ListBox.xaml)中工作,如果它包含在App.xaml中,只有当你直接将它连接到ListBox.xaml <converters:BoolToStringConverter x:Key="BoolToString" />一切都会变好。
错误:异常:找不到名为“BoolToString”的资源。资源名称区分大小写。
我真正想要得到的是:是否有可能以某种方式从App.xaml到ListBox.xaml获得转换器,这 不是仅在ListBox.xaml中使用的选项。
列表框.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:PriceCreator.Services.Converters"
>
<converters:BoolToStringConverter x:Key="BoolToString" />
<ControlTemplate x:Key="VideoListItems" TargetType="ListBoxItem">
<Grid>
<Border
Name="brd"
Margin="10,2"
Background="{StaticResource MediumBrush}"
CornerRadius="2">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="25*"/>
<RowDefinition Height="22*"/>
<RowDefinition Height="26*"/>
<RowDefinition Height="818*"/>
</Grid.RowDefinitions>
<TextBlock x:Name="Name" FontWeight="Bold" Foreground="Gray" Style="{StaticResource BaseText}" FontSize="18"
Margin="5" TextTrimming="CharacterEllipsis" Text="{Binding Name,StringFormat=Имя товара:{0}}" TextAlignment="Center" VerticalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="142*"/>
<ColumnDefinition Width="38*"/>
<ColumnDefinition Width="229*"/>
<ColumnDefinition Width="365*"/>
</Grid.ColumnDefinitions>
<TextBlock Margin="2" x:Name="Price" Grid.Column="0" Text="{Binding Price,StringFormat=Цена:{0}}" FontWeight="Bold" Foreground="Gray" Style="{StaticResource BaseText}" FontSize="18" VerticalAlignment="Center" HorizontalAlignment="Right" />
<TextBlock Margin="2" x:Name="CurrencyId" Grid.Column="1" Text="{Binding CurrencyId}" FontWeight="Bold" Foreground="Gray" Style="{StaticResource BaseText}" FontSize="18" VerticalAlignment="Center" />
<TextBlock FontWeight="Bold" Foreground="Gray" Style="{StaticResource BaseText}" Margin="2" x:Name="Stock_quantity" Grid.Column="2" Text="{Binding Stock_quantity,StringFormat=Количество товаров:{0}}" FontSize="18" VerticalAlignment="Center" />
<TextBlock TextTrimming="CharacterEllipsis" FontWeight="Bold" Foreground="Gray" Style="{StaticResource BaseText}" Margin="2" x:Name="Vendor" Grid.Column="3" Text="{Binding Vendor,StringFormat=Производитель товара:{0}}" FontSize="18" VerticalAlignment="Center"/>
</Grid>
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="251*"/>
<ColumnDefinition Width="523*"/>
</Grid.ColumnDefinitions>
<TextBlock Style="{StaticResource BaseText}" Margin="2" Text="{Binding Available,StringFormat=Есть товар в наличии:{0},Converter={StaticResource BoolToString}}" FontSize="18" FontWeight="Bold" Foreground="Gray" />
</Grid>
</Grid>
</Border>
<!--<Polygon
Name="triangle"
Margin="2"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Fill="{Binding ElementName=brd, Path=Background}"
Points="0,0 20,15, 0,30"
Visibility="Hidden" />-->
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="brd" Property="Background" Value="{StaticResource BrushBlue}" />
<!--<Setter TargetName="triangle" Property="Visibility" Value="Visible" />-->
<Setter TargetName="Name" Property="Foreground" Value="White" />
<Setter TargetName="Price" Property="Foreground" Value="White" />
<Setter TargetName="CurrencyId" Property="Foreground" Value="White" />
<Setter TargetName="Vendor" Property="Foreground" Value="White" />
<Setter TargetName="Stock_quantity" Property="Foreground" Value="White" />
<!--<Setter TargetName="Id" Property="Foreground" Value="White" />-->
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="brd" Property="Background" Value="{StaticResource BrushBlue}" />
<Setter TargetName="Name" Property="Foreground" Value="White" />
<Setter TargetName="Price" Property="Foreground" Value="White" />
<Setter TargetName="CurrencyId" Property="Foreground" Value="White" />
<Setter TargetName="Vendor" Property="Foreground" Value="White" />
<Setter TargetName="Stock_quantity" Property="Foreground" Value="White" />
<!--<Setter TargetName="Id" Property="Foreground" Value="White" />-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ResourceDictionary>
应用程序.xaml
<Application x:Class="PriceCreator.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:PriceCreator.Services.Converters"
StartupUri="Views\PriceCeatorView.xaml">
<Application.Resources>
<!--Подключение ресурсов-->
<ResourceDictionary >
<!--Подключение конвертеров-->
<converters:StringTointConverter x:Key="StringToint" />
<converters:IntToVisibilityConverter x:Key="IntToVisibility" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\Colors.xaml"/>
<ResourceDictionary Source="Styles\Fonts.xaml"/>
<!--<ResourceDictionary Source="Styles\Icons.xaml" />-->
<ResourceDictionary Source="Styles\ScrollViewer.xaml" />
<ResourceDictionary Source="Styles\Texts.xaml" />
<ResourceDictionary Source="Styles\Buttons.xaml" />
<!--<ResourceDictionary Source="Styles\RadioButton.xaml" />-->
<!--<ResourceDictionary Source="Styles\ContentControls.xaml" />
<ResourceDictionary Source="Styles\UserControl.xaml" />-->
<ResourceDictionary Source="Styles\ListBox.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
转换器连接
xmlns:converters="clrnamespace:PriceCreator.Services.Converters"
- 我在 Services 文件夹中有一个 Converters 文件夹。创建转换器的基类:
从 Bool 到 String 的示例转换器:
使用数据类型的一个示例是 Bool(Available)。