我想实现一个 WPF CustomControl,它...
- 通常看起来像一个按钮并显示一个浮点值作为字符串
- 当拖动按钮时, float 值就像一个虚拟 slider 一样被操纵
- 单击按钮时,它会被替换为文本框,并预填充当前值作为字符串。可以编辑此文本。在 TextBox 外部单击或按回车键会将控件更改回 Button,并将编辑后的文本用作新值。
我们需要在高度简化的界面中使用此控件。虽然描述听起来有点奇怪,但它对我们来说非常有效。但出于性能原因,我们现在必须将当前的实现重构为 CustomControl 中的 UserControl。
我让控件的 slider 部分运行并设法显示附加到 Content DependencyProperty 的 TextBox。然而,遗憾的是,我无法从 ControlTemplate 访问此 TextBox,它大致如下所示:
<Style TargetType="{x:Type local:FloatEditButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:FloatEditButton}">
<Grid Margin="0">
<Viewbox VerticalAlignment="Center" HorizontalAlignment="{Binding RelativeSource={RelativeSource TemplatedParent},Path=HorizontalContentAlignment}" Margin="0">
<ContentPresenter Name="content" Margin="2" VerticalAlignment="Center" />
</Viewbox>
<TextBox x:Name="XTextBox" Visibility="Collapsed" Text="{Binding Content}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="EditingAsTextBox" Value="True">
<Setter TargetName="XTextBox" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
知道如何将其实现为 CustomControl 吗?
最佳答案
你的想法真不一般。从可用性的角度来看,您不应该提供诸如按钮之类的众所周知的控件的这种“令人惊讶”的行为。也许组合框会是更好的控制方式。它有一个文本部分,您可以在其中进行编辑,甚至还有一个下拉菜单,您可以在其中提供预定义的值。拖动部分使用不可见的(背景#01ffffff)拇指。
我不确定我是否理解你的问题。您不应将依赖属性命名为“Content”。如果您从按钮派生控件,则内容已定义为按钮内容。
关于c# - 如何将虚拟 slider 创建为结合了 Button 和 TextBox 的 WPF-CustomControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542278/