在IronPython中创建自定义WPF控件:由标准控件组成的控件
我已经研究了这里的其他自定义控件创建问题,以及其他在线资源,但是我不知道如何创建不需要C代码隐藏文件的自定义控件。由于我的项目是纯IronPython,我不知道如何将C#代码与它集成在一起 我想做的事情甚至没有那么复杂;没有凌乱的样式或渲染变换或任何东西。我只是试图创建一个由我现有的一组控件组成的复合控件,以便可以按程序添加/删除这些复合控件。例如,我有一个GroupBox: 如您所见,它只是一个GroupBox,标题中有一个TextBox和一个ComboBox,其主体由包含一些复选框的UniformGrid填充。以下是XAML:在IronPython中创建自定义WPF控件:由标准控件组成的控件,python,wpf,custom-controls,ironpython,composite-controls,Python,Wpf,Custom Controls,Ironpython,Composite Controls,我已经研究了这里的其他自定义控件创建问题,以及其他在线资源,但是我不知道如何创建不需要C代码隐藏文件的自定义控件。由于我的项目是纯IronPython,我不知道如何将C#代码与它集成在一起 我想做的事情甚至没有那么复杂;没有凌乱的样式或渲染变换或任何东西。我只是试图创建一个由我现有的一组控件组成的复合控件,以便可以按程序添加/删除这些复合控件。例如,我有一个GroupBox: 如您所见,它只是一个GroupBox,标题中有一个TextBox和一个ComboBox,其主体由包含一些复选框的Uni
<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>
DO1
我读过关于控件合成的书,将一组控件组合成一个控件。我想让整个GroupBox成为一个可以按程序添加或删除的控件。如何使用IronPython实现这一点?我仍然觉得有更好的方法,所以我将保留这个问题,但我在IronPython中运行时添加自定义控件的方法是将XAML放在一个单独的文件中,使用
XamlReader.Load()加载它,并将返回值存储在一个新对象中。该对象成为控件,然后可以将其添加到网格
、DockPanel
,或者您拥有的其他对象中。我花了一段时间建立了心理联系,我可以使用XamlReader
从XAML构建任何控件,而不仅仅是Window
s
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>
...
...
看起来您包含的图像已经不存在了。