2017-12-22 8 views
0

可能であれば、コンテンツダイアログのすべてのコントロールを反復したいと思います。ContentDialogのコントロールを反復できますか?

なぜなら、私はcontentdialogの各コントロールのTagプロパティを取得して設定したいからです。例の疑似コードの

例えば、

public ContentDialog MyDialog = new ContentDialog 
    { 
     Title = "My Title", 
     Content = "My Content", 
     PrimaryButtonText = "OK", 
     SecondaryButtonText = "Cancel", 
    }; 

void DeepFirstSearch(ContentDialog IN_pMyDialog, DependencyObject IN_pControl) 
{ 
    foreach (pControl in IN_pMyDialog) 
    { 
     if (pControl is TextBlock) 
     { 
     ... 
     } 
     else if (pControl is Button) 
     { 
     ... 
     } 

     if (pControl.GetChildCount() > 0) 
     { 
     DeepFirstSearch(IN_pDialog, pControl) 
     } 
    } 
} 
+0

https://stackoverflow.com/questions/874380/wpf-how-do-i-loop-through-the-all-controls-in-a-windowコメントを – NeedsAnswers

+0

おかげで、しかしVisualTreeHelper.GetChildrenCount ()は他のコントロールとは異なり0を返します。 – user8977483

答えて

0

子が存在しないので、ContentDialogにはビジュアルツリーはありません。そのプロパティを反復処理したい場合は、リフレクションで行うことができます。

var cd = new ContentDialog(); 
var cdProps = cd.GetType().GetProperties(); 
foreach (var propInfo in cdProps) 
{ 
    if (typeof(Button).IsAssignableFrom(propInfo.PropertyType)) 
    { 
     var button = (Button)(cd.GetType().GetProperty(propInfo.Name).GetValue(cd, null)); 
     // Do stuff with it 
    } 
    if (typeof(TextBlock).IsAssignableFrom(propInfo.PropertyType)) 
    { 
     var textBlock = (TextBlock)(cd.GetType().GetProperty(propInfo.Name).GetValue(cd, null)); 
     // Do stuff with it 
    } 
} 
+0

お返事ありがとうございました。しかし、私はアイデアを得ましたが、コードは機能しませんでしたので、少し修正しました。 – user8977483

+1

public void Reflection(ContentDialog IN_pObject) { var cdProps = IN_pObject.GetType()。GetProperties(); foreach(cdPropsのvar propInfo) { string strTypeName = propInfo.ToString()。分割( '')[0]; 場合(strTypeName == "可能System.String" || propInfo.Name == "タイトル" || propInfo.Name == "コンテンツ") { \t \t // TODO IN_pObject.GetType()。GetPropertyメソッド( propInfo.Name).SetValue( "TODO"); } } } – user8977483

関連する問題