【发布时间】:2013-02-20 17:50:38
【问题描述】:
我有许多在运行时生成的文本框。我想在执行某个操作时将它们的边框画笔颜色设置为绿色,以及更改边框粗细。就我而言,这必须从代码隐藏中完成。
我的第一个挑战是在鼠标悬停时阻止 TextBox 边框改变颜色。这是通过添加这种样式来实现的:
<UserControl.Resources>
<Style TargetType="TextBox">
<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="#888888"
BorderThickness="1" >
<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>
以上代码适用于我的 UserControl。
接下来,一个新的问题开始出现。每当我尝试在代码隐藏方法中手动更改 BorderBrush 和 BorderThickness 属性时,绝对不会发生任何事情。这是代码:
txt.BorderThickness = new Thickness(3);
txt.BorderBrush = Brushes.Green;
有什么想法吗?
【问题讨论】:
-
你刚刚问了这个问题,不是吗?我搜索并找到了this。
-
请将标题编辑为真正的问题。
-
WPF Frustrations- WPF 没有挫败感。您正在以 winforms 的方式使用 WPF。这就是你沮丧的原因。 -
I've got a number of TextBoxes which are generated at run-time- 这不是winforms。您需要ItemsControl或任何派生词。 -
另外,除非你有充分的理由,否则不要子类化 WPF 控件。
标签: c# .net wpf visual-studio xaml