0

Silverlight (Form.xaml) には、ラベルを使用してデータを表示するユーザー コントロールがあります。現在、これらのラベルの前景色と可視性は、次のように app.xaml のテンプレートによって制御されています。

<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>

Form.xaml のラベルの xaml は次のとおりです。

<sdk:Label Template="{StaticResource DataLabel}" HorizontalAlignment="Left" Margin="140,53,0,0" VerticalAlignment="Top" Content="Ground" FontSize="13.333" Width="138"/>

Form.xaml の編集ボタンをクリックしたときに、これらのラベルを非表示にしたいと思います。ただし、このテンプレートの分離コードで可視性プロパティを変更する方法がわかりません。

    private void EditButton_Click(object sender, RoutedEventArgs e)
    {

        // Place code to alter template properties here...

    }

これを行う方法についてのアイデアはありますか?ご協力とご意見をお寄せいただきありがとうございます。

4

1 に答える 1

1

次のようなものを試すことができます(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>

(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"/>

(xaml内のラベルに名前を付けただけです)

        var res = (FindResource("DataLabel") as ControlTemplate).FindName("myLabelTemplate", myLabel);
        if (res != null && res is FrameworkElement)
            (res as FrameworkElement).Visibility = Visibility.Hidden;

FindResource が null 以外の何かを返すかどうかなどを確認しませんでした (処理できると思います ;) )

ただし、私があなただったら、アプリ リソースを使用してユーザー コントロールの特定のリソースを配置することはありません (代わりに、userControl の xaml でテンプレートを (添付リソースとして) 使用するか、または使用しません)。テンプレート内のプロパティを変更したい場合: 適切に管理されていないと、null ポインター例外が原因でアプリがクラッシュする可能性があります)

于 2012-06-11T15:43:33.927 に答える