2010-12-07 2 views
2

다른 온라인 리소스뿐만 아니라 여기에있는 다른 사용자 정의 컨트롤 만들기 질문을 살펴 봤지만 C# 코드 숨김 파일이 필요없는 사용자 지정 컨트롤 내 프로젝트는 순수한 IronPython이므로 C# 코드를 어떻게 통합 할 것인지 모르겠습니다.IronPython에서 사용자 정의 WPF 컨트롤 만들기 : 표준 컨트롤로 구성된 컨트롤

내가하려는 것은 그렇게 복잡하지 않습니다. 어수선한 스타일이나 렌더링 변환 등은 필요 없습니다. 난 단지 내가 가진 기존의 것들을 복합 컨트롤을 만들려고하고있어, 그래서이 복합 컨트롤을 순차적으로 추가/제거 할 수있다. 예를 들어, 나는이 그룹 상자가 : 몸은 약간의 확인란을 포함하는 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으로 어떻게이 작업을 수행 할 수 있습니까?

답변

0

더 나은 방법이있는 것처럼 느껴지므로이 질문을 공개적으로 남겨 두겠다. IronPython에서 런타임에 사용자 지정 컨트롤을 추가하는 방법은 단순히 XAML을 별도의 파일에 배치하고 XamlReader.Load()으로 반환 값을 새 객체에 저장합니다. 그 객체는 컨트롤이되고, Grid, DockPanel 또는 무엇이 추가 될 수 있습니다. 내가 XamlReader을 사용하여 XAML에서 모든 컨트롤을 구성 할 수있는 정신적 연결을 만드는 데는 어느 정도 시간이 걸렸습니다. 단지 Window이 아닙니다.

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

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

XAML 파일은 단순히 올바른 네임 스페이스를 설정하는 xmlns 속성과 함께 위의 상기 GroupBox 마크 업이 포함되어 있습니다.

<GroupBox Name="DO1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <GroupBox.Header> 
    ... 
관련 문제