我在网上看过很多关于我的问题的文章,但到处都有相同的答案:使用转换器。
其中一个可以找到here。
如果您的应用程序中的列表框少于5个,则可以使用转换器。
假设我在WPF应用程序中有100个列表框。然后我想将characterCasing应用于这些列表框使用的样式。在这种情况下,我可能需要一种不使用Converter的方法。
我想我可以通过使用附属财产来解决这个问题。我不确定我是否可以在款式中使用附加功能。如果我可以使用那些,那么我会创建一个附加的属性。但我不知道何时设置或如何设置ListBoxItem的characterCasing。
更新
列表框:
<ListBox Grid.Column="1" ItemsSource="{Binding ParentMenuItems}"
DisplayMemberPath="MenuItemName" />
风格:
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource baseStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border" Padding="5,2" SnapsToDevicePixels="true" CornerRadius="3" >
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource BrushOrangeSelector}"/>
<!--<Setter TargetName="Border" Property="BitmapEffect">
<Setter.Value>
<DropShadowBitmapEffect ShadowDepth="2" Brush="#FFFF6A00" />
</Setter.Value>
</Setter>-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="BorderThickness" Value="0" />
</Style>
UPDATE2:
<Style TargetType="{x:Type ListBox}">
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding Path=., Converter={StaticResource toUpperCaseConverter}}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
UPDATE3:
public partial class MenuItem
{
public MenuItem()
{
this.MenuItems1 = new HashSet<MenuItem>();
}
public int MenuItemID { get; set; }
public string MenuItemName { get; set; }
public Nullable<int> ParentID { get; set; }
public virtual ICollection<MenuItem> MenuItems1 { get; set; }
public virtual MenuItem MenuItem1 { get; set; }
}
UPDATE4:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border" Padding="5,2" SnapsToDevicePixels="true" CornerRadius="3" >
<TextBlock Text="{Binding Path=Content, RelativeSource={RelativeSource AncestorType=ListBoxItem}, Converter={StaticResource toUpperCaseConverter}}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource BrushOrangeSelector}"/>
<Setter TargetName="Border" Property="Effect">
<Setter.Value>
<DropShadowEffect ShadowDepth="0" Color="Orange" BlurRadius="10" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
答案 0 :(得分:0)
最简单的方法是创建一个转换器 (这不是用VS写的,所以请注意它只是一个样本
public class ToUpperCaseConverter : IValueConverter
{
///
}
<Border Name="Border" Padding="5,2" SnapsToDevicePixels="true" CornerRadius="3" >
<ContentPresenter Content="{Binding Path=MenuItemName,Converter={StaticResource uppercaseConverter}" />
</Border>
编辑:试试这个:
<DataTemplate>
<TextBlock Text="{Binding Path=Content,RelativeSource={RelativeSource AncestorType=ListBoxItem}, Converter={StaticResource toUpperCaseConverter}}" />
</DataTemplate>