You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF如何在Ellipse(椭圆)中嵌套可绑定ViewModel属性的TextBox

问题根因

你现有代码的核心问题是错误复用了Label这类内容控件的模板逻辑:

  • TextBox是文本输入控件,重写控件模板时必须提供名为PART_ContentHost的内容宿主(通常用ScrollViewer)用来承载输入的文本、处理光标逻辑,你用的ContentPresenter不支持TextBox的输入交互
  • 双向绑定不需要放到模板内部,直接绑定顶层TextBox的Text属性即可

正确实现代码

<TextBox
      Width="30"
      Height="30"
      HorizontalContentAlignment="Center"
      VerticalContentAlignment="Center"
      Text="{Binding FilterText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
      <TextBox.Template>
            <ControlTemplate TargetType="TextBox">
                  <Grid>
                        <!-- 背景椭圆 -->
                        <Ellipse Stroke="Black" StrokeThickness="1" Fill="White"/>
                        <!-- 固定命名的文本宿主,TextBox内部逻辑会自动识别该名称的元素作为输入内容载体 -->
                        <ScrollViewer 
                              x:Name="PART_ContentHost"
                              Margin="2"
                              HorizontalAlignment="Center"
                              VerticalAlignment="Center"/>
                  </Grid>
            </ControlTemplate>
      </TextBox.Template>
</TextBox>

关键说明

  • 必须给文本宿主元素设置x:Name="PART_ContentHost",这是WPF TextBox的约定命名,缺少该元素会导致文本无法显示、无法输入
  • Ellipse可以根据需求调整Fill属性,默认透明的话输入的文字可能和背景混淆,建议设置为白色
  • 如果觉得输入区域太小,可以适当调大TextBox的宽高,或者调整ScrollViewer的Margin值

内容的提问来源于stack exchange,提问作者Melissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:27:04