Mam problem podczas próby zamknięcia GroupBox. Chcę GroupBox, który zawali się, jeśli wszystkie jego dzieci zostaną zwinięte.Czy można powiązać widoczność GroupBox z widocznością jego dzieci?
Udało mi się to osiągnąć za pomocą multibinding do właściwości, jak pokazano poniżej.
<StackPanel>
<GroupBox>
<GroupBox.Visibility>
<MultiBinding
Converter="{StaticResource multiBoolOrToVis}"
ConverterParameter="{x:Static Visibility.Collapsed}"
>
<Binding Path="a_visible"/>
<Binding Path="b_visible"/>
</MultiBinding>
</GroupBox.Visibility>
<GroupBox.Header>
<Label Content="GroupBox"/>
</GroupBox.Header>
<StackPanel>
<Label
Content="A"
Visibility="{Binding Path=a_visible, Converter={StaticResource boolToVis}}"
/>
<Label
Content="B"
Visibility="{Binding Path=b_visible, Converter={StaticResource boolToVis}}"
/>
</StackPanel>
</GroupBox>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox
Content="A Visible"
Grid.Column="0"
Grid.Row="1"
IsChecked="{Binding Path=a_visible, Mode=TwoWay}"
/>
<CheckBox
Content="B Visible"
Grid.Column="1"
Grid.Row="1"
IsChecked="{Binding Path=b_visible, Mode=TwoWay}"
/>
</Grid>
</StackPanel>
Problem polega na tym, że chcemy to zrobić kilka razy i nie martwimy się o pozostawienie wiązania. Moje pytanie brzmi, czy można to zrobić w sposób ogólny, najlepiej w stylu. Kolejnym wymaganiem jest to, że musi być w kodzie xaml, a nie w kodzie.
Więc moją idealną odpowiedzią byłby styl, więc mogłem wykonać następujące czynności w moim xaml.
<StackPanel>
<GroupBox Style="ChildrenVisibilityStyle">
<GroupBox.Header>
<Label Content="GroupBox"/>
</GroupBox.Header>
<StackPanel>
<Label
Content="A"
Visibility="{Binding Path=a_visible, Converter={StaticResource boolToVis}}"
/>
<Label
Content="B"
Visibility="{Binding Path=b_visible, Converter={StaticResource boolToVis}}"
/>
</StackPanel>
</GroupBox>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox
Content="A Visible"
Grid.Column="0"
Grid.Row="1"
IsChecked="{Binding Path=a_visible, Mode=TwoWay}"
/>
<CheckBox
Content="B Visible"
Grid.Column="1"
Grid.Row="1"
IsChecked="{Binding Path=b_visible, Mode=TwoWay}"
/>
</Grid>
</StackPanel>
Przyjrzałem się tym pytaniom i doprowadziły mnie do przekonania, że nie jest to możliwe; binding in controltemplate, stackpanel visibility, border visibility.
Przepraszamy, jeśli wcześniej udzielono odpowiedzi. Z góry dziękuję za wszelkie odpowiedzi/komentarze.
Ale jeśli chcę utworzyć kolejny blok grupowy lub dodać inny element, czy nie muszę każdorazowo dodawać warunki? To byłby ten sam problem, co w przypadku MultiBinding – davidcorne