0

コンテンツ プレゼンターをホストするユーザー コントロールを作成する必要がある状況があります。これで、コンテンツ プレゼンターはテンプレートを使用してデータを表示する必要があります。

次のようにユーザーコントロールを設計しました。xaml

<UserControl x:Class="Dashboard.ComponentStatisticsControl"
         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" 
         Name="SatisticsControl"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Label Content="{Binding ElementName=SatisticsControl, Path=Title}" 
           Grid.Row="0"
           Background="SkyBlue"/>
        <ContentPresenter Content="{Binding ElementName=SatisticsControl, Path=AdditionalContent}"
                      Grid.Row="1"/>
    </Grid>
</UserControl>

これで、ComponentStatisticsControl をホストする MainWindow.xaml で定義された WrapPanel ができました。

<Window x:Class="Dashboard.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Dashboard"
    Height="350" Width="525"
    ShowInTaskbar="True"
    WindowState="Maximized"
    WindowStyle="None"
    Name="_this">
    <Window.Resources>
        <LinearGradientBrush x:Key="PanelBackground" 
                         StartPoint="0, 1"
                         EndPoint="1, 0">
            <GradientStop Color="SkyBlue" Offset="0.3"/>
            <GradientStop Color="PaleGreen" Offset="1"/>
        </LinearGradientBrush>
        <SolidColorBrush x:Key="BorderBrush"
                     Color="Blue"/>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0">
            <Button Click="Button_Click"
                HorizontalAlignment="Left"
                VerticalAlignment="Center">Click</Button>
        </StackPanel>
        <WrapPanel Name="WrapPanelMain"
               Orientation="Horizontal"
               FlowDirection="LeftToRight"
               Grid.Row="1">
        </WrapPanel>
    </Grid>
</Window>

今、コード ビハインドで ComponentStatisticsControl のコンテンツを作成しています。

    public void CreateComponent(ref DiscoveryMessage Message)
    {
        switch (Message.Identifier)
        {
            case ComponentIdentifier.Dispatcher:
                {
                    ComponentStatisticsControl StatisticsControl = new ComponentStatisticsControl();
                    StatisticsControl.Title = "Dispatcher";
                    StatisticsControl.AdditionalContent = new Label() { Content = "Hello"};
                    WrapPanelMain.Children.Add(StatisticsControl);
                    break;   
                }
        }
    }

ただし、追加されたデータは表示されません。私は何を逃しましたか。私は何がうまくいかなかったのかについて多くの時間を費やしてきました。

WrapPanel のラベル「Hello」に設定されたコンテンツを確認できるはずです。

public class DispatcherStatistics
{
    private uint f_QCount;

    public uint QueueCount { get { return f_QCount; } 
        set 
        { 
            f_QCount = value;
        } 
    }

}

このクラス インスタンスを AdditionalContent に設定します。そのため、このクラスの新しいインスタンスを割り当てるたびに QueueCount が更新されます。

前もって感謝します

編集ラップパネルでクラスタイプのテキストを取得していました。上記の問題は解決しましたが、表示するコンテンツのテンプレートを定義するにはどうすればよいですか。

    public void CreateComponent(ref DiscoveryMessage Message)
    {
        1switch (Message.Identifier)
        {
            case ComponentIdentifier.Dispatcher:
                {
                    ComponentStatisticsControl StatisticsControl = new ComponentStatisticsControl();
                    StatisticsControl.Title = "Dispatcher";
                    StatisticsControl.AdditionalContent = f_clDispatcherStatistics;
                    WrapPanelMain.Children.Add(StatisticsControl);
                    break;
                }
        }
    }

f_clDispatcherStatistics は、DispatcherStatistics クラスのプライベート インスタンス変数です。これは、「Dashboard.DispatcherStatistics」を表示しています。

のようなものを表示したい

キューカウント: 0

この形式のように。

4

1 に答える 1

0

あなたはそれを少し複雑にしています。ContentのプロパティをUserControl直接使用できます。

テンプレートの重要な部分は次のとおりです (デフォルトを使用ContentPresenter):

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Label Content="{Binding ElementName=SatisticsControl, Path=Title}" 
       Grid.Row="0"
       Background="SkyBlue"/>
    <ContentPresenter Grid.Row="1"/>
</Grid>

そして、Contentプロパティを直接使用します。

ComponentStatisticsControl StatisticsControl = new ComponentStatisticsControl();
StatisticsControl.Title = "Dispatcher";
StatisticsControl.Content = new Label() { Content = "Hello"};
WrapPanelMain.Children.Add(StatisticsControl);
于 2013-09-27T13:09:46.440 に答える