ユーザーが依存プロパティに設定するモードに応じて、ユーザーコントロールをTextBlockと別のTextBlockまたはTextBlockとTextBoxに変更するユーザーコントロールを作成しようとしています。私は依存関係のプロパティが情報を取得していることを知っていますが、正しいテンプレートを設定しようとすると問題が発生します。何らかの理由で、テンプレートが正しくレンダリングされません。条件付きXAML(WPF)
XAML:
<UserControl x:Class="BookOrganizer.FlipBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:my="clr-namespace:BookOrganizer"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal" Height="Auto" Width="Auto" >
<StackPanel.Resources>
<ContentControl x:Key="Box">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Title}" Height="Auto" Width="Auto" />
<TextBox Text="{Binding Path=Text}" Height="Auto" Width="Auto" />
</StackPanel>
</ContentControl>
<ContentControl x:Key="Block" Height="Auto" Width="Auto">
<StackPanel Orientation="Horizontal" Height="Auto" Width="Auto">
<TextBlock Text="{Binding Path=Title}" Height="Auto" Width="Auto" />
<TextBlock Text="{Binding Path=Text}" Height="Auto" Width="Auto"/>
</StackPanel>
</ContentControl>
</StackPanel.Resources>
<ContentControl Template="{Binding Path=BoxMode}" />
</StackPanel>
背後にあるコード:事前に
using System;
using System.Windows;
using System.Windows.Controls;
namespace BookOrganizer
{
/// <summary>
/// Interaction logic for FlipBox.xaml
/// </summary>
public partial class FlipBox : UserControl
{
public static readonly DependencyProperty TitleProperty = DependencyProperty.Register(
"Title", typeof(String), typeof(FlipBox), new PropertyMetadata("nothing"));
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text", typeof(String), typeof(FlipBox), new PropertyMetadata("nothing"));
public static readonly DependencyProperty BoxModeProperty = DependencyProperty.Register(
"BoxMode", typeof(String), typeof(FlipBox), new PropertyMetadata("Box"));
public FlipBox()
{
InitializeComponent();
this.DataContext = this;
}
public String Title
{
get { return (String)this.GetValue(TitleProperty); }
set { this.SetValue(TitleProperty, value); }
}
public String Text
{
get { return (String)this.GetValue(TextProperty); }
set { this.SetValue(TextProperty, value); }
}
public String BoxMode
{
get { return (String)this.GetValue(BoxModeProperty); }
set { this.SetValue(BoxModeProperty, value); }
}
}
}
感謝。ここで
*「正しく表示されません」*を定義してください。期待されるアウトプットは何か、実際のアウトプットは何ですか? – Heinzi
予想される出力は、テキストブロックと別のテキストブロック、またはテキストブロックとテキストボックスのいずれかになります。私が得るのは、円の中に赤い円と白いXが入っているか、何もない箱です。私はそれをどのように実行しようとするかに基づいています。 – chris