Reputation: 173
I have a user control in Silverlight (Form.xaml) that uses labels to show data. Currently I have the foreground color and visibility of these labels controlled by a template in app.xaml as follows:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
x:Class="TestSilverlight.App"
>
<Application.Resources>
<ControlTemplate x:Key="DataLabel" x:Name="DataLabel" TargetType="sdk:Label">
<sdk:Label Visibility="Visible" Foreground="White" Content="{TemplateBinding Content}"></sdk:Label>
</ControlTemplate>
</Application.Resources>
</Application>
And here is the xaml for the label in Form.xaml:
<sdk:Label Template="{StaticResource DataLabel}" HorizontalAlignment="Left" Margin="140,53,0,0" VerticalAlignment="Top" Content="Ground" FontSize="13.333" Width="138"/>
When I click on the edit button of Form.xaml, I'd like to hide these labels. However, I'm cannot figure out how to change the visibility property in the code behind for this template.
private void EditButton_Click(object sender, RoutedEventArgs e)
{
// Place code to alter template properties here...
}
Any ideas on how to do this? Thank you so much for your help and input.
Upvotes: 0
Views: 673
Reputation: 3513
You could try something like (works using WPF):
<ControlTemplate x:Key="DataLabel" x:Name="DataLabel" TargetType="sdk:Label">
<sdk:Label x:Name="myLabelTemplate" Visibility="Visible" Foreground="White" Content="{TemplateBinding Content}"></sdk:Label>
</ControlTemplate>
(I just gave a name to the label inside the controlTemplate)
<sdk:Label x:Name="myLabel" Template="{StaticResource DataLabel}" HorizontalAlignment="Left" Margin="140,53,0,0" VerticalAlignment="Top" Content="Ground" FontSize="13.333" Width="138"/>
(I just gave a name to the label inside the xaml)
var res = (FindResource("DataLabel") as ControlTemplate).FindName("myLabelTemplate", myLabel);
if (res != null && res is FrameworkElement)
(res as FrameworkElement).Visibility = Visibility.Hidden;
I didn't check to see if FindResource return something not null, and so on (I think you can handle it ;) )
However If I were you I wouldn't use the app resource to put a particular resource of a user control (i'd use the template it in the xaml of the userControl (as an attached resource) instead or even wouldn't use a template at all if you want to modify properties within: it could lead to crash the app because of null pointer exception if not well managed)
Upvotes: 1