2012-01-17 8 views
0

スタックパネル(名前はMainStackPanel)を親として持つWPFフォームを持っています。それはその子として様々なグループボックスを持っています。各グループボックスには2つのチェックボックス(チェックボックス1とチェックボックス2)があります。親スタックパネルの子であるグループボックス内のチェックボックスコントロール

ここでは、すべてのチェックボタンをメインスタックパネルに追加して、クリックすると自動的に各グループのチェックボックス1をすべてチェックします。

私はWPFに新しい、このような何かが動作するはずです。この

<EDIT> 

<StackPanel x:Name="MainStackPanel" Orientation="Vertical"> 

    <Grid DataContext="{Binding}"> 

     <Button Content="UnCheck All" Height="23" Name="uncheckall" 
       Width="75" Margin="434,0,492,0" /> 

     <Button Content="Check All" Height="23" Name="checkall" Width="75" 
       Margin="175,0,751,0" Click="checkall_Click" /> 

    </Grid> 

    <GroupBox> 
     <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="30"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 

     <CheckBox x:Name="checkbox1" 
        Style="{StaticResource styleCheckBoxLeftSideText}" 
        IsChecked="{Binding Path=Disabled, 
           Converter={StaticResource BooleanConverter}, 
           ConverterParameter='false,true'}" 
        VerticalAlignment="Center" 
        HorizontalAlignment="Left" 
        Content="Task Enabled:" 
        Margin="9,0,0,0"/> 
     </Grid> 
    </GroupBox> 
</StackPanel> 

</EDIT> 
+0

これまで何をやっていますか?ちょっとしたコードを表示すると、たくさんの助けになります。 –

+0

はスタックパネルコードとグループボックスコードです。 (グループボックスにはグリッドがあり、チェックボックスはグリッドの内側にあります) – user1154892

+0

UIのバックアップモデルがありますか? –

答えて

1

を達成する方法を見つけるためにしようとしています:jbergerが提案されているよう

しかし:MVVMを見てください、それはあなたのタスクを作りますはるかに簡単... ​​

XAML:

<GroupBox> 
    <StackPanel> 
    <CheckBox x:Name="checkbox1" Margin="5">CheckBox1</CheckBox> 
    <CheckBox x:Name="checkbox2" Margin="5">CheckBox2</CheckBox> 
    </StackPanel> 
</GroupBox> 

<GroupBox> 
    <StackPanel> 
    <CheckBox x:Name="checkbox3" Margin="5">CheckBox1</CheckBox> 
    <CheckBox x:Name="checkbox4" Margin="5">CheckBox2</CheckBox> 
    </StackPanel> 
</GroupBox> 

ヘルパークラス:How can I find WPF controls by name or type?を参照)

public static class VisualTreeExtensions 
{ 
    public static IEnumerable<T> FindChildren<T>(this DependencyObject source) 
    where T : DependencyObject 
    { 
    if (source != null) 
    { 
     IEnumerable<DependencyObject> childs = GetChildObjects(source); 
     foreach (DependencyObject child in childs) 
     { 
     //analyze if children match the requested type 
     if (child != null && child is T) 
     { 
      yield return (T)child; 
     } 

     //recurse tree 
     foreach (T descendant in FindChildren<T>(child)) 
     { 
      yield return descendant; 
     } 
     } 
    } 
    } 

    public static IEnumerable<DependencyObject> GetChildObjects(
    this DependencyObject parent) 
    { 
    if (parent == null) yield break; 

    if (parent is ContentElement || parent is FrameworkElement) 
    { 
     //use the logical tree for content/framework elements 
     foreach (object obj in LogicalTreeHelper.GetChildren(parent)) 
     { 
     var depObj = obj as DependencyObject; 
     if (depObj != null) yield return (DependencyObject)obj; 
     } 
    } 
    else 
    { 
     //use the visual tree per default 
     int count = VisualTreeHelper.GetChildrenCount(parent); 
     for (int i = 0; i < count; i++) 
     { 
     yield return VisualTreeHelper.GetChild(parent, i); 
     } 
    } 
    } 
} 

コードビハインド:

private void checkall_Click(object sender, RoutedEventArgs e) 
{ 
    SetCheckBoxCheckedStatus(true); 
} 

private void uncheckall_Click(object sender, RoutedEventArgs e) 
{ 
    SetCheckBoxCheckedStatus(false); 
} 

private void SetCheckBoxCheckedStatus(bool isChecked) 
{ 
    foreach (CheckBox check in MainStackPanel.FindChildren<CheckBox>()) 
    { 
    check.IsChecked = isChecked; 
    } 
} 
+0

ありがとうございました。私のコードでそれを試してみましょう – user1154892

関連する問題