代码隐藏找不到在 XAML 中声明的控件
Code-behind can't find control declared in XAML
谷歌搜索一段时间后,x:Name
应该可以解决我的问题。
在我的 wtfapp.xaml 中有一个 TextBlock
将在运行时创建:
<TextBlock x:Name="wtf" Text="{Binding fTx}"/>
在代码隐藏中,它应该是可以访问的,所以我尝试更改它的前景色:
wtf.Foreground = Brushes.DarkGreen;
编译时出现错误:
The name "wtf" does not exist in the current context.
如果我没记错的话,这意味着 TextBlock
"wtf" 无法访问。
我如何解析引用?
编辑:
XAML:
<DataTemplate x:Key="ItemTemplate_NextAnime_HOVER">
<Grid Margin="2,0,1,0" Width="82" Height="120" >
<Image x:Name="NxtAnime_Image" Width="82" Height="120" Stretch="UniformToFill" Panel.ZIndex="0">
<Image.Source>
<BitmapImage UriCachePolicy="Revalidate" UriSource="{Binding rLocalPic}"/>
</Image.Source>
</Image>
<Grid Panel.ZIndex="1" >
<Border Background="#7F000000" Panel.ZIndex="0" x:Name="brd">
<Popup IsOpen="True" StaysOpen="True" PlacementTarget="{Binding ElementName=brd}" Placement="Top">
<StackPanel Background="#FFC54B4B" Orientation="Horizontal" Height="334" Width="430">
<Image Width="213" Height="326" Stretch="UniformToFill" Margin="4,4,4,6" Source="{Binding LocalPic}"/>
<StackPanel Orientation="Vertical" Margin="4,4,4,4" Name="are">
<TextBlock Margin="0,0,0,10" Text="{Binding Title}" FontSize="22" Foreground="White" TextWrapping="Wrap" MaxWidth="200" FontWeight="Bold"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Relation: " FontSize="20" Foreground="White"/>
<TextBlock x:Name="wtf" Text="{Binding Type}" FontSize="20" Foreground="White"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Popup>
</Border>
</Grid>
</Grid>
</DataTemplate>
这是 DataTemplate
ListBoxItem
。
很难从模板中获取元素,因为模板就像一个工厂,会生成多个实例。
正如 user2946329 在评论中所建议的那样, 回答了如何获取元素,但可能还有另一种方法可以满足您的需求。
例如,如果您想更改 wtf
元素的颜色,您可以使用触发器。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ...}" Value="False">
<Setter TargetName="wtf" Property="Foreground" Value="DarkGreen"/>
</DataTrigger>
</DataTemplate.Triggers>
谷歌搜索一段时间后,x:Name
应该可以解决我的问题。
在我的 wtfapp.xaml 中有一个 TextBlock
将在运行时创建:
<TextBlock x:Name="wtf" Text="{Binding fTx}"/>
在代码隐藏中,它应该是可以访问的,所以我尝试更改它的前景色:
wtf.Foreground = Brushes.DarkGreen;
编译时出现错误:
The name "wtf" does not exist in the current context.
如果我没记错的话,这意味着 TextBlock
"wtf" 无法访问。
我如何解析引用?
编辑:
XAML:
<DataTemplate x:Key="ItemTemplate_NextAnime_HOVER">
<Grid Margin="2,0,1,0" Width="82" Height="120" >
<Image x:Name="NxtAnime_Image" Width="82" Height="120" Stretch="UniformToFill" Panel.ZIndex="0">
<Image.Source>
<BitmapImage UriCachePolicy="Revalidate" UriSource="{Binding rLocalPic}"/>
</Image.Source>
</Image>
<Grid Panel.ZIndex="1" >
<Border Background="#7F000000" Panel.ZIndex="0" x:Name="brd">
<Popup IsOpen="True" StaysOpen="True" PlacementTarget="{Binding ElementName=brd}" Placement="Top">
<StackPanel Background="#FFC54B4B" Orientation="Horizontal" Height="334" Width="430">
<Image Width="213" Height="326" Stretch="UniformToFill" Margin="4,4,4,6" Source="{Binding LocalPic}"/>
<StackPanel Orientation="Vertical" Margin="4,4,4,4" Name="are">
<TextBlock Margin="0,0,0,10" Text="{Binding Title}" FontSize="22" Foreground="White" TextWrapping="Wrap" MaxWidth="200" FontWeight="Bold"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Relation: " FontSize="20" Foreground="White"/>
<TextBlock x:Name="wtf" Text="{Binding Type}" FontSize="20" Foreground="White"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Popup>
</Border>
</Grid>
</Grid>
</DataTemplate>
这是 DataTemplate
ListBoxItem
。
很难从模板中获取元素,因为模板就像一个工厂,会生成多个实例。
正如 user2946329 在评论中所建议的那样,
例如,如果您想更改 wtf
元素的颜色,您可以使用触发器。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding ...}" Value="False">
<Setter TargetName="wtf" Property="Foreground" Value="DarkGreen"/>
</DataTrigger>
</DataTemplate.Triggers>