C# 从类中创建属性
我创建了一个类,它缩短文本以适合文本框,同时还添加了“…” 例如:C# 从类中创建属性,c#,wpf,xaml,C#,Wpf,Xaml,我创建了一个类,它缩短文本以适合文本框,同时还添加了“…” 例如: [ThisTextis]toolong>[ThisTex…] 我正在Windows 8.1虚拟机(虚拟机)上使用Microsoft Visual Studio 2013,该软件是一个应用程序 现在它可能不是完美的,但它工作得非常好。我现在想知道的是,我是否可以从该类中创建布尔属性,以便用户可以在XAML中的文本框中启用/禁用它: <TextBox CutText="True"/> 我很抱歉地通知你,你浪费了时间。W
[ThisTextis]toolong>[ThisTex…]
我正在Windows 8.1虚拟机(虚拟机)上使用Microsoft Visual Studio 2013,该软件是一个应用程序
现在它可能不是完美的,但它工作得非常好。我现在想知道的是,我是否可以从该类中创建布尔属性,以便用户可以在XAML中的文本框中启用/禁用它:
<TextBox CutText="True"/>
我很抱歉地通知你,你浪费了时间。WPF已经内置了该功能。您可以将设置为
字符省略号
或单词省略号
,这将自动修剪控件的溢出文本并添加省略号(…
)。请参见以下简单示例:
<TextBlock TextTrimming="CharacterEllipsis" Width="150">
Lorem ipsum dolor sit amet, consectetur adipisicing</TextBlock>
。。。其中,
TextBoxProperties
将是定义附加属性的类的名称,CutText
将是属性本身的名称。请参阅链接页面中的,以了解如何执行此操作。您可以使用该属性中的CutText
类。很抱歉通知您,您浪费了时间。WPF已经内置了该功能。您可以将设置为字符省略号
或单词省略号
,这将自动修剪控件的溢出文本并添加省略号(…
)。请参见以下简单示例:
<TextBlock TextTrimming="CharacterEllipsis" Width="150">
Lorem ipsum dolor sit amet, consectetur adipisicing</TextBlock>
。。。其中,
TextBoxProperties
将是定义附加属性的类的名称,CutText
将是属性本身的名称。请参阅链接页面中的,以了解如何执行此操作。您可以使用该属性中的CutText
类。既不可能也没有必要执行您试图执行的操作。不能像这样向现有组件添加新特性。此外,如果您需要,还可以通过为文本框定义一个WPF样式来实现您想要做的事情。不能像这样向现有组件添加新特性。另外,如果您希望,有一种更简单的方法来实现您想要做的事情,即使用其他答案中的建议为TextBox
定义WPF样式,我已经编写了一个自定义控件
,它应该对您有用
public class TrimmedTextBox : TextBox
{
public bool Trim
{
get { return (bool)GetValue(TrimProperty); }
set { SetValue(TrimProperty, value); }
}
// Using a DependencyProperty as the backing store for Trim. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TrimProperty =
DependencyProperty.Register("Trim", typeof(bool), typeof(TrimmedTextBox), new PropertyMetadata(true));
public TextTrimming Trimming
{
get { return (TextTrimming)GetValue(TrimmingProperty); }
set { SetValue(TrimmingProperty, value); }
}
// Using a DependencyProperty as the backing store for Trimming. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TrimmingProperty =
DependencyProperty.Register("Trimming", typeof(TextTrimming), typeof(TrimmedTextBox), new PropertyMetadata(TextTrimming.CharacterEllipsis));
static TrimmedTextBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TrimmedTextBox), new FrameworkPropertyMetadata(typeof(TrimmedTextBox)));
}
}
以及样式
:
<Style TargetType="{x:Type local:TrimmedTextBox}"
BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:TrimmedTextBox}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsKeyboardFocused" Value="False"/>
<Condition Property="Trim" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBlock Text="{TemplateBinding Text}"
TextTrimming="{Binding Trimming, RelativeSource={RelativeSource TemplatedParent}}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
用法:
<local:TrimmedTextBox Trim="True"
Text="Le toucan has arrived"
Width="50"
Trimming="CharacterEllipsis"/>
你可能不得不玩弄这种风格,以获得想要的外观和感觉,但想法仍然存在。这是一个控制模板
,它扩展了文本框
,允许您设置是否要文本框修剪内容以及需要修剪的类型
有关自定义控件的更多信息,请参见。使用其他答案中的建议,我编写了一个对您有用的自定义控件
public class TrimmedTextBox : TextBox
{
public bool Trim
{
get { return (bool)GetValue(TrimProperty); }
set { SetValue(TrimProperty, value); }
}
// Using a DependencyProperty as the backing store for Trim. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TrimProperty =
DependencyProperty.Register("Trim", typeof(bool), typeof(TrimmedTextBox), new PropertyMetadata(true));
public TextTrimming Trimming
{
get { return (TextTrimming)GetValue(TrimmingProperty); }
set { SetValue(TrimmingProperty, value); }
}
// Using a DependencyProperty as the backing store for Trimming. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TrimmingProperty =
DependencyProperty.Register("Trimming", typeof(TextTrimming), typeof(TrimmedTextBox), new PropertyMetadata(TextTrimming.CharacterEllipsis));
static TrimmedTextBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TrimmedTextBox), new FrameworkPropertyMetadata(typeof(TrimmedTextBox)));
}
}
以及样式
:
<Style TargetType="{x:Type local:TrimmedTextBox}"
BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:TrimmedTextBox}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsKeyboardFocused" Value="False"/>
<Condition Property="Trim" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBlock Text="{TemplateBinding Text}"
TextTrimming="{Binding Trimming, RelativeSource={RelativeSource TemplatedParent}}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiTrigger>
</Style.Triggers>
</Style>
用法:
<local:TrimmedTextBox Trim="True"
Text="Le toucan has arrived"
Width="50"
Trimming="CharacterEllipsis"/>
你可能不得不玩弄这种风格,以获得想要的外观和感觉,但想法仍然存在。这是一个控制模板
,它扩展了文本框
,允许您设置是否要文本框修剪内容以及需要修剪的类型
有关自定义控件的更多信息,请参阅。您想要实现的目标还不太清楚。您希望发生什么,请给出一系列操作。@JamesHarcourt好吧,简单地说,我想创建一个类似TextBlock.texttiming
属性的属性,但它是一个TextBox而不是一个TextBlock。您想要实现什么还不是很清楚。你想做什么,请给出一系列操作。@JamesHarcourt好吧,简单地说,我想创建一个类似TextBlock.texttiming
属性的属性,但是是一个TextBox而不是一个TextBlock。我想他想要的是一个TextBox
,而不是TextBlock
。不幸的是,内置功能仅适用于文本块,而不适用于文本框,这也是我创建新类的原因。请参阅问题以获得解决方案。另一种选择是CodeProject上的页面。@Sheridan感谢您的建议。我已经使用了第二个链接来编程我的类。第一个链接有一个有趣的概念,如果我只使用几个文本框,它将非常有用。然而,在我的例子中,我们将需要数百个文本框的属性,这看起来非常混乱。这就是为什么我试图创建一个更简单的解决方案。我认为他想要的是文本框
,而不是文本块
。不幸的是,内置功能只存在于文本块,而不存在于文本框,这也是我创建新类的原因。请参阅问题以获得解决方案。另一种选择是CodeProject页面。@Sheridan感谢您的建议。我已经使用了第二个链接来编程我的类。第一个链接有一个有趣的概念,如果我只使用几个文本框,它将非常有用。然而,在我的情况下,我们将需要数百年的财产