11414


XAMLのWindowにユーザーコントロール(UserControl1)を2つ配置しました。  
それぞれのx:Nameに"UC1", "UC2"を指定しております。

[code]

    <Window xmlns:WpfApplication1="clr-namespace:WpfApplication1"
        x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <StackPanel>
            <WpfApplication1:UserControl1 x:Name="UC1" Height="100"/>
            <WpfApplication1:UserControl1 x:Name="UC2" Height="100"/>
        </StackPanel>
    </Window>
    
[/code]

UserControl1のコードビハインドのコンストラクタにて、  
"UC1"または"UC2"を取得することは可能でしょうか？

コードビハインドで、  
this.Name  
と記述することで取得可能かと考えましたが、正しく取得できませんでした（UserControl1のXAMLで指定した、x:Nameが取得されます）。


CC BY-SA 3.0
2015-06-16T07:43:56.880
11400
2015-06-16T10:25:53.253
2015-06-16T07:56:16.260
10165
10165
question
visual-studio wpf xaml
WPFアプリケーションにおいて、UserControlのコードビハインド内で、親側で設定したx:Nameを取得したい。


`MainWindow`のコンストラクターで`InitializeComponent`が完了するまではMainWindow.xamlの内容は反映されません。なので`UserControl`側だけで処理したいのであれば`Loaded`イベントなどをハンドルする必要があります。

[code]

    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
            Loaded += UserControl1_Loaded;
        }
    
        private void UserControl1_Loaded(object sender, RoutedEventArgs e)
        {
            Console.WriteLine(Name);
            Loaded -= UserControl1_Loaded; // 複数回発生するので終わったら解除する
        }
    }
    
[/code]


CC BY-SA 3.0
2015-06-16T10:25:53.253
11414
2015-06-16T10:25:53.253
5750
11400
answer