2

ここにあるその他のカスタム コントロールの作成に関する質問や、他のオンライン リソースを見てきましたが、C# コード ビハインド ファイルを必要としないカスタム コントロールを作成する方法がわかりません。私のプロジェクトは純粋な IronPython であるため、C# コード ビハインドを統合する方法がわかりません。

私がやろうとしていることはそれほど複雑ではありません。乱雑なスタイリングやレンダリング変換などはありません。これらの複合コントロールを手続き的に追加/削除できるように、私が持っている既存のものの束の複合コントロールを作成しようとしているだけです。たとえば、次の GroupBox があります。

ご覧のとおり、ヘッダーに TextBox と ComboBox を持つ単なる GroupBox であり、その本体にはいくつかの CheckBox を含む UniformGrid が設定されています。XAML は次のとおりです。

<GroupBox Name="DO1">
    <GroupBox.Header>
        <DockPanel>
            <TextBlock VerticalAlignment="Center">DO1</TextBlock>
            <ComboBox Name="DO1DeviceList" Margin="3 0 0 0" ItemsSource="{Binding DOtable}">
            </ComboBox>
        </DockPanel>
    </GroupBox.Header>
    <UniformGrid Rows="1">
        <StackPanel>
            <Label Content="3W1L" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o1" IsChecked="{Binding o1}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="3W3V" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o2" IsChecked="{Binding o2}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="2" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="Ni" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o3" IsChecked="{Binding o3}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="3" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="2W1" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o4" IsChecked="{Binding o4}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="4" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="Vac2" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o5" IsChecked="{Binding o5}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="5" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="3W4V" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o6" IsChecked="{Binding o6}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="6" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="Cu" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o7" IsChecked="{Binding o7}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="7" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
        <StackPanel>
            <Label Content="3W2L" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <CheckBox Name="DO1o8" IsChecked="{Binding o8}" HorizontalAlignment="Center" VerticalAlignment="Center" />
            <Label Content="8" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </StackPanel>
    </UniformGrid>
</GroupBox>

コントロールの合成、多数のコントロールを単一のコントロールにグループ化することについて読んだことがあります。この GroupBox 全体を、プロシージャルに追加または削除できる単一のコントロールにしたいと考えています。IronPython でこれを達成するにはどうすればよいですか?

4

1 に答える 1

1

まだもっと良い方法があると思うので、この質問は開いたままにしておきますが、IronPythonでカスタムコントロールを実行時に追加する方法は、XAMLを別のファイルに配置し、ロードしてXamlReader.Load()保存するだけです。新しいオブジェクトの戻り値。そのオブジェクトがコントロールになり、それを、、、またはあなたが持っているものに追加するGridことDockPanelができます。XamlReadersだけでなく、XAMLから任意のコントロールを構築するために使用できる精神的な接続を確立するのにしばらく時間がかかりましたWindow

with File.OpenRead("MyControl.xaml") as xamlfile:
    newcontrol = System.Windows.Markup.XamlReader.Load(xamlfile)

ui.FindName("MyDockPanel").Children.Add(newcontrol)

XAMLファイルには、適切な名前空間を確立するGroupBoxための属性とともに、上記のマークアップが含まれているだけです。xmlns

<GroupBox Name="DO1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <GroupBox.Header>
    ...
于 2011-01-10T17:30:30.927 に答える