我的WPF应用程序中有下一个控件模板。
<Style TargetType="Label" x:Key="LabelStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBox x:Name="MyTextBlock" Text="{TemplateBinding Content}" Height="20" HorizontalAlignment="Left" VerticalAlignment="Top" />
<Label Content="{TemplateBinding Content}" Grid.Column="1" Grid.Row="1"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
TextBox“MyTextBlock”在窗口的C#代码中不可见。如何在代码
中访问此文本块答案 0 :(得分:4)
尝试直接将您的媒体资源绑定到文本框的可见性
<TextBox Visibility="{Binding IsFieldCodesEnabled, Converter={StaticResource BoolToVis}}" />
其中BoolToVis定义为:
<Resouces>
<loc:BooleanToVisibilityConverter k:key="BoolToVis"/>
</Resources>
答案 1 :(得分:1)
您可以在后面的代码中执行与XAML页面类似的操作(除非您需要在OnApplyTemplate
覆盖中执行此操作):
public override void OnApplyTemplate() {
base.OnApplyTemplate();
var MyTextBlock = this.GetTemplateChild("MyTextBlock")
}
编辑注意到MyTextblock实际上是一个TextBox,因此将TextBox
转换为TextBlock
会导致异常。尝试更新的代码。
答案 2 :(得分:1)
我为我的情况找到了一些解决方案。我只是在ControlTemplate中使用TextBox的加载事件
private void MyTextBlock_Loaded(object sender, RoutedEventArgs e)
{
TextBox txt = sender as TextBox;
if (txt!=null)
{
Messagebox.Show("It works");
}
}
但它不是那么漂亮的解决方案。