c# - 如何将虚拟 slider 创建为结合了 Button 和 TextBox 的 WPF-CustomControl

标签 c# wpf xaml user-controls custom-controls

我想实现一个 WPF CustomControl,它...

  1. 通常看起来像一个按钮并显示一个浮点值作为字符串
  2. 当拖动按钮时, float 值就像一个虚拟 slider 一样被操纵
  3. 单击按钮时,它会被替换为文本框,并预填充当前值作为字符串。可以编辑此文本。在 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/

相关文章:

c# - 构建 winforms C# 解决方案

c# - 在 C# 中加载编码的 Ruby 对象

c# - Windows 8 Metro 专注于网格

C# 事件杀死程序且没有错误

c# - DataGridCell 中的 WPF 转换器

c# - 正确显示 BusyIndi​​cator

c# - 为什么在嵌套网格中调整星号大小不起作用?

c# - 将切换按钮绑定(bind)到两个命令

.net - ListBox/ListView 等控件的默认 ItemTemplate

c# - HttpWebRequest 结果为 “The request was aborted: Could not create SSL/TLS secure channel” 并返回 code=AlgorithmMismatch