在IronPython中创建自定义WPF控件:一个由标准控件组成的控件

2024-10-01 05:04:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看了这里的其他自定义控件创建问题,以及其他联机资源,但是我不知道如何创建一个不需要C代码隐藏文件的自定义控件。由于我的项目是纯IronPython,我不知道如何将其背后的C代码与之集成。在

我要做的事情甚至没有那么复杂;没有杂乱无章的样式设置或渲染转换或任何东西。我只是试图创建一个由我现有的一堆控件组成的复合控件,这样我就可以按程序添加/删除这些复合控件。例如,我有一个GroupBox:

正如您所看到的,它只是一个GroupBox,它的头中有一个TextBox和一个ComboBox,其主体由uniformmgrid填充,其中包含一些复选框。下面是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实现这一点?在


Tags: 代码namecontentlabel控件bindingcenterironpython
1条回答
网友
1楼 · 发布于 2024-10-01 05:04:23

我仍然觉得有更好的方法,所以我将这个问题留着讨论,但是我在IronPython中完成自定义控件的运行时添加的方法是简单地将XAML放在一个单独的文件中,用XamlReader.Load()加载它,并将返回值存储在一个新对象中。{{cd2>你可以把它添加到控制中。我花了一段时间才建立起心理联系,我可以使用XamlReader从XAML构造任何控件,而不仅仅是Windows

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

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

XAML文件只包含上面提到的GroupBox标记和一个xmlns属性来建立正确的名称空间。在

^{pr2}$

相关问题 更多 >