2013-03-19 103 views
0

我试图更改组合框的边框 - 一个看似简单的任务,但是没有发生任何事情。无法更改属性

编辑:

这是我的代码:

中出现以下事件:

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>  

我使用ComboBox的默认controltemplate,所以我不知道为什么它不起作用。有任何想法吗?

+0

不要操纵代码UI元素。 – 2013-03-19 19:25:40

+2

您是否设置了“BorderThickness”? – Dom 2013-03-19 19:26:09

+1

你在Windows 8上吗?我似乎记得在其他控件(如“ToggleButton”)在Windows 8上呈现的方式存在一些错误。我刚刚尝试了Dom在Windows 8计算机上发布的解决方案,而“BorderThickness”更改了“BorderBrush '不。 – 2013-03-19 19:37:28

回答

0

您应该定义新的ControlTemplate,here您拥有全部代码。

如果你想的ComboBox改变边界,则应该从msdn复制和粘贴代码,改变只有以下样式:

XAML:

<ComboBox Height="30" Width="150" BorderBrush="Red" BorderThickness="6" /> 

结果

<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> 

使用示例:

enter image description here

XAML:

<ComboBox Height="30" Width="150" BorderBrush="Green" BorderThickness="3" /> 

结果:

enter image description here

+0

为什么要downvote?它不工作? – kmatyaszek 2013-03-19 20:05:06

+0

我不是那个低调的人。还没有尝试过你的方法,但我编辑了问题 – 2013-03-19 20:08:24

+0

啊,好吧,所以@DotNET你应该尝试一下,我测试了它,它的工作:) – kmatyaszek 2013-03-19 20:12:32

1

我做的时候我想修改的风格,我使用WPF督察(你可以找到它:http://wpfinspector.codeplex.com/

,然后附加到您的组合框,你可以访问所有属性和样式...你可以直接修改它们并看到结果,它的速度很快......

也许你的边界为空?或者厚度是0?