テキスト、画像、ボタンを含むグリッドレイアウトを動的に作成するC#とWPFのプロジェクトに取り組んでいます。これらのグリッドの多くを作成し、スタックパネルに追加します。XamlReader.Create()関数を使用してこのグリッドを作成します。これがコード全体です。Xamlコードが長すぎることをお詫びします。
string xaml = "<Grid Height='92' Margin='0,10,0,0' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>"+
"<Grid.Background>"+
"<LinearGradientBrush EndPoint='0.5,1' StartPoint='0.5,0'>"+
"<GradientStop Color='#FFACD7FF' Offset='0.172'/>"+
"<GradientStop Color='#FFACD7FF' Offset='0.508'/>"+
"<GradientStop Color='#FF69B5FF' Offset='0.996'/>"+
"<GradientStop Color='#FF79BEFB' Offset='0.017'/>"+
"<GradientStop Color='#FFACD7FF' Offset='0.877'/>"+
"</LinearGradientBrush>"+
"</Grid.Background>"+
"<Grid.RowDefinitions>"+
"<RowDefinition Height='0.522*'/>"+
"<RowDefinition Height='0.478*'/>"+
"</Grid.RowDefinitions>"+
"<Grid.ColumnDefinitions>"+
"<ColumnDefinition Width='133'/>"+
"<ColumnDefinition Width='73.5'/>"+
"<ColumnDefinition Width='0.833*'/>"+
"<ColumnDefinition Width='0.167*'/>"+
"<ColumnDefinition Width='108.775'/>"+
"</Grid.ColumnDefinitions>"+
"<Image Source='stockHome.jpg' Margin='8' Grid.Column='4' Grid.RowSpan='2'/>"+
"<TextBlock TextWrapping='Wrap' Text='Details: "+
addHouse.description+
"' Margin='8' Grid.Column='2' HorizontalAlignment='Center'/>"+
"<Button Content='View Full Description' Grid.Column='2' HorizontalAlignment='Center' Margin='4,8,0,8' Grid.Row='1' Width='134.667'/>"+
"<Label Content='$"+
addHouse.cost+
"' Margin='8,8,0,0' FontSize='21.333' FontFamily='Segoe UI Semibold' HorizontalAlignment='Left' RenderTransformOrigin='0.53,1.474'/>"+
"<Label Content='"+
addHouse.neighborhood+
"' Margin='8,0,0,8' Grid.Row='1' HorizontalAlignment='Left' Width='117' FontSize='18.667'/>"+
"<TextBlock Grid.Column='1' Margin='8,15,8,8' Grid.RowSpan='2' TextWrapping='Wrap'><Run Text='"+
addHouse.type+
"'/><LineBreak/><Run Text='"+
addHouse.bedrooms+
" Bed'/><LineBreak/><Run Text='"+
addHouse.bathrooms+
" Bath'/><LineBreak/><Run Text='ID: "+
addHouse.ID+
"'/></TextBlock>"+
"<Image Grid.Column='3' Margin='8,23.667,8,20.251' Grid.RowSpan='2' Source='HeartPop.png'/>"+
"</Grid>";
// Load the panel
StringReader stringReader = new StringReader(xaml);
XmlReader xmlReader = XmlReader.Create(stringReader);
Grid readerLoadGrid = (Grid)XamlReader.Load(xmlReader);
これは私にとってはうまく機能し、実行時にグリッドレイアウトを生成する正しい方法だと思いましたが、ボタンに名前を付けてイベントハンドラーを定義する必要があるため、これは崩壊します。ボタンの説明をに変更しようとすると
<Button x:Name = 'houseButton' Click = 'descriptionButtonClick' ...
XAMLParse例外が発生します。これについて読んだ後、実行時にxamlでこれらのことを宣言できるかどうかはわかりません。だから今、私はこれを他にどのように行うかについて非常に混乱しています。グリッドを作成した後で名前を変更することはできません。これは、呼び出される名前がないためです。名前がなくてもUIElementの子にアクセスする方法はありますか?または、実行時にXAMLで名前を宣言し、それを間違って実行する方法はありますか?