【问题标题】:Applying ControlTemplate to Textbox causes .Text to become blank (Silverlight)将 ControlTemplate 应用于文本框会导致 .Text 变为空白(Silverlight)
【发布时间】:2010-10-07 22:38:15
【问题描述】:

我在 XAML 页面上有一堆我想要相同大小的文本框。我创建了一个控件模板并将其放在页面的 Grid.Resources 部分

<Grid.Resources>
    <ControlTemplate x:Key="basicTextbox" TargetType="TextBox" >
        <TextBox MinWidth="200" />
    </ControlTemplate>
</Grid.Resources>

然后我将它应用到如下文本框:

<TextBox x:Name="txtNewSec1" Template="{StaticResource basicTextbox}"/>

我有一个用户可以按下的按钮,并在后面的代码中获取用户输入的文本并将其应用于对象。每当文本在文本框中时文本变为空白时,我都会感到惊讶。从文本框中删除模板并再次单击按钮后,文本在按钮的单击事件处理程序期间神奇地可用。是否必须在 ControlTemplate 中设置一些内容以允许文本框在代码隐藏事件期间具有文本?或者这是 Silverlight 中的某种错误?

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    您不应该使用控件模板来实现您想要做的事情。你需要的是……造型(tada)

    <Grid.Resources>
      <Style x:Key="basicTextBox" TargetType="TextBox">
        <Setter Property="MinWidth" Value="200"/>
      </Style>
    </Grid.Resources>
    

    和:

    <TextBox x:Name="txtNewSec1" Style="{StaticResource basicTextbox}"/>
    

    【讨论】:

    • 正确,只是晚了 60 秒。乔希想出了一个:) +1 做对了。
    • 是的,我在发送答案时看到了它……为时已晚。 ;) 但总比没有好。谢谢
    【解决方案2】:

    改成样式,好像可以了:

    <Style x:Key="basicTextbox" TargetType="TextBox" >
        <Setter Property="MinWidth" Value="200" />
    </Style>
    

    并在文本框上将“模板”更改为“样式”

    <TextBox x:Name="txtNewSec1" Style="{StaticResource basicTextbox}" />
    

    【讨论】:

    • 这是我的下一个建议。那会做你想做的事。 +1 自己解决:)
    【解决方案3】:

    在 TextBox 的模板中有一个 TextBox 似乎很奇怪。

    这不是在第一个文本框内创建第二个文本框吗?

    当我模拟您的示例并将 Text 值分配给 Template TextBox 时,它会立即显示,而后面实例中的任何 Text 值什么都不做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2013-06-21
      相关资源
      最近更新 更多