C# 无法更改属性
我试图改变组合框的边界-一个看似简单的任务,但什么都没有发生 编辑: 这是我的代码: 事件中会出现以下内容:C# 无法更改属性,c#,.net,wpf,user-interface,mvvm,C#,.net,Wpf,User Interface,Mvvm,我试图改变组合框的边界-一个看似简单的任务,但什么都没有发生 编辑: 这是我的代码: 事件中会出现以下内容: cmb.BorderThickness = new Thickness(3); cmb.BorderBrush = Brushes.Green; 这是XAML: <UserControl x:Class="QueryBuilder.FilterWindow" xmlns="http://schemas.microsoft.com/winfx/20
cmb.BorderThickness = new Thickness(3);
cmb.BorderBrush = Brushes.Green;
这是XAML:
<UserControl x:Class="QueryBuilder.FilterWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" MaxHeight="200" Background="White" PreviewMouseLeftButtonDown="UserControl_PreviewMouseLeftButtonDown">
<UserControl.Resources>
<Style TargetType="TextBox">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="BorderBrush" Value="Silver"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBoxBase}">
<Border Name="Border" Padding="1" Background="#FFFFFF" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" >
<ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
<Setter TargetName="Border" Property="BorderBrush" Value="#EEEEEE"/>
<Setter Property="Foreground" Value="#888888"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="TreeViewItem">
<Setter Property="Template" Value="{StaticResource TreeViewWithLines}"/>
<Setter Property="Padding" Value="0,5,0,5"/>
<Setter Property="IsExpanded" Value="true"/>
</Style>
</UserControl.Resources>
<ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto">
<TreeView Name="tvFilters" Margin="0,10,0,10" Background="White" BorderBrush="White"/>
</ScrollViewer>
</UserControl>
我正在为组合框使用默认的controltemplate,所以我不知道为什么它不起作用。有什么想法吗?当我想修改样式时,我使用WPF Inspector(你可以在那里找到:) 然后附加到组合框,您就可以访问所有属性和样式。。。您可以实时修改它们并查看结果,速度很快
也许你的边界是空的?或者厚度为0?您应该定义新的ControlTemplate,您拥有所有代码 如果您想要更改组合框的边框,您应该从中复制并粘贴代码,并且只更改以下样式:
<Style x:Key="{x:Type ComboBox}" TargetType="ComboBox">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
<Setter Property="MinWidth" Value="120"/>
<Setter Property="MinHeight" Value="20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<ToggleButton
Name="ToggleButton"
Template="{StaticResource ComboBoxToggleButton}"
Grid.Column="2"
Focusable="false"
IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
ClickMode="Press">
</ToggleButton>
<ContentPresenter
Name="ContentSite"
IsHitTestVisible="False"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Margin="3,3,23,3"
VerticalAlignment="Center"
HorizontalAlignment="Left" />
<TextBox x:Name="PART_EditableTextBox"
Style="{x:Null}"
Template="{StaticResource ComboBoxTextBox}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="3,3,23,3"
Focusable="True"
Background="Transparent"
Visibility="Hidden"
IsReadOnly="{TemplateBinding IsReadOnly}"/>
<Popup
Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Slide">
<Grid
Name="DropDown"
SnapsToDevicePixels="True"
MinWidth="{TemplateBinding ActualWidth}"
MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border
x:Name="DropDownBorder"
Background="{StaticResource WindowBackgroundBrush}"
BorderThickness="1"
BorderBrush="{StaticResource SolidBorderBrush}"/>
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
</ScrollViewer>
</Grid>
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasItems" Value="false">
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
<Setter TargetName="DropDownBorder" Property="CornerRadius" Value="4"/>
<Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
</Trigger>
<Trigger Property="IsEditable"
Value="true">
<Setter Property="IsTabStop" Value="false"/>
<Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
<Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
</Style.Triggers>
</Style>
用法示例:
XAML:
结果:
XAML:
结果:
不要在代码中操作UI元素。您是否设置了
边框厚度
?是否在Windows 8上?我似乎记得在Windows 8上呈现其他控件(如ToggleButton
)的方式中存在一些错误。我刚刚在我的Windows 8计算机上尝试了Dom发布的解决方案,而边框厚度
改变了边框笔刷
却没有改变。@Benjamin-我实际上是在使用Windows 8。你推荐什么?我已经让它为文本框工作,但不是ComboBoxeskmatyaszek答案可能是你目前唯一可行的选择,即定义一个新的控件模板。我不是投反对票的人。还没有尝试过你的方法,但我编辑了问题啊,好吧,所以@DotNET你应该试试,我测试了它,它开始工作:)我很快尝试了,但它太多地改变了组合框的外观和感觉。它看起来太奇怪了,就像现在一样working@DotNET我为您准备了示例解决方案,您可以从以下链接下载:。如果现在为你工作,请告诉我。六羟甲基三聚氰胺六甲醚。。我认为这是改变它的唯一方法,当你尝试改变默认样式时,你不能改变BorderThickness
,所以你应该定义新的控制模板。我的要求是动态改变颜色和厚度。当您试图从示例项目中的代码隐藏中执行此操作时,什么都不会发生
<ComboBox Height="30" Width="150" BorderBrush="Red" BorderThickness="6" />
<ComboBox Height="30" Width="150" BorderBrush="Green" BorderThickness="3" />