如何在按钮中访问命名的 TextBlock XAML C# UWP
How to access a named TextBlock in a button XAML C# UWP
我更改了我的 UWP 应用程序以具有响应式 UI。
从那时起,我在将文本放入按钮时遇到了问题。
这是 XAML:
<Page
x:Class="Stock_Manager_Windows.IncomeOrder3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Stock_Manager_Windows"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="#FFBBBBBB">
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
...
<Button x:Name="Envoyer" Content="Envoyer" HorizontalAlignment="Stretch" Margin="2,2,0,2" VerticalAlignment="Stretch" Grid.Column="4" Grid.ColumnSpan="2" Grid.Row="4" Background="#249C23" Foreground="White" FontWeight="Bold" Click="buttonSendSelectedItems_Click">
<Button.ContentTemplate>
<DataTemplate x:Name="EnvoyerDataTemplate" >
<Viewbox>
<TextBlock x:Name="EnvoyerTxt" Text="Envoyer"/>
</Viewbox>
</DataTemplate>
</Button.ContentTemplate>
</Button>
...
</Grid>
</Page>
在我使用此 C# 代码更新按钮中的文本的 modif 之前:
Envoyer.Content = "Envoyer (" + count + ")";
现在不可能了...
然后起初我尝试了 :
envoyerTxt.Text = "Envoyer (" + count + ")";
我尝试使用以下链接解释的解决方案,但似乎代码已过时,不相关或我太笨无法理解。
WPF How to access control from DataTemplate
Accessing a control which is in a contentpresenter in c#
How do I access a control inside a XAML DataTemplate?
how to access a control within Data Template from code behind?
FindVisualChild reference issue
有人可以向我解释解决方案吗?
也许问题不在 c# 代码中,而是在 XAML 中,我没有任何线索。
在您的 ContentTemplate
中将 TextBlock
更改为此。
<TextBlock x:Name="EnvoyerTxt" Text="{Binding}" />
这意味着现在,无论设置什么内容(文本),它都将绑定到您的模板 TextBlock
文本 属性 并且它会相应地更改。
同样清楚,您不能通过模板中的名称访问元素。因为模板是在运行时加载的,而不是在编译时加载的。这就是为什么只有在模板内部绑定才能分配数据。
我更改了我的 UWP 应用程序以具有响应式 UI。 从那时起,我在将文本放入按钮时遇到了问题。 这是 XAML:
<Page
x:Class="Stock_Manager_Windows.IncomeOrder3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Stock_Manager_Windows"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="#FFBBBBBB">
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
...
<Button x:Name="Envoyer" Content="Envoyer" HorizontalAlignment="Stretch" Margin="2,2,0,2" VerticalAlignment="Stretch" Grid.Column="4" Grid.ColumnSpan="2" Grid.Row="4" Background="#249C23" Foreground="White" FontWeight="Bold" Click="buttonSendSelectedItems_Click">
<Button.ContentTemplate>
<DataTemplate x:Name="EnvoyerDataTemplate" >
<Viewbox>
<TextBlock x:Name="EnvoyerTxt" Text="Envoyer"/>
</Viewbox>
</DataTemplate>
</Button.ContentTemplate>
</Button>
...
</Grid>
</Page>
在我使用此 C# 代码更新按钮中的文本的 modif 之前:
Envoyer.Content = "Envoyer (" + count + ")";
现在不可能了... 然后起初我尝试了 :
envoyerTxt.Text = "Envoyer (" + count + ")";
我尝试使用以下链接解释的解决方案,但似乎代码已过时,不相关或我太笨无法理解。
WPF How to access control from DataTemplate
Accessing a control which is in a contentpresenter in c#
How do I access a control inside a XAML DataTemplate?
how to access a control within Data Template from code behind?
FindVisualChild reference issue
有人可以向我解释解决方案吗? 也许问题不在 c# 代码中,而是在 XAML 中,我没有任何线索。
在您的 ContentTemplate
中将 TextBlock
更改为此。
<TextBlock x:Name="EnvoyerTxt" Text="{Binding}" />
这意味着现在,无论设置什么内容(文本),它都将绑定到您的模板 TextBlock
文本 属性 并且它会相应地更改。
同样清楚,您不能通过模板中的名称访问元素。因为模板是在运行时加载的,而不是在编译时加载的。这就是为什么只有在模板内部绑定才能分配数据。