Bir GroupBox'un çökmesi için bir sorunla karşılaşıyorum. Tüm çocuklar çökerse çökecek bir GroupBox istiyorum.GroupBox'un görünürlüğünü, çocukların görünürlüğüne bağlayabilir misiniz?
Bunu, aşağıda gösterildiği gibi, özelliklerle çoklu bağlantı kullanarak başarmayı başardım.
<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>
bu sorun bu birden çok kez yapmak ve bağlayıcı bir kapalı bırakarak dert etmek isterler olduğunu. Yani benim sorum bu genel olarak, tercihen bir tarzda bunu yapmanın bir yolu var. Başka bir gereksinim, arkasında xaml kodu olmamalıdır.
Bu yüzden ideal cevabım bir stil olurdu, böylece xaml'ımda aşağıdakileri yapabilirdim.
<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>
Bu sorulara baktım ve bunun mümkün olmadığını düşünmeme neden oluyorlar; binding in controltemplate, stackpanel visibility, border visibility.
Bu daha önce yanıtlanmış olsaydı özür dilerim. Herhangi bir cevap/yorum için şimdiden teşekkür ederiz.
<StackPanel>
<GroupBox>
<GroupBox.Header>
<Label Content="GroupBox"/>
</GroupBox.Header>
<StackPanel>
<Label x:Name="lbl_a" Content="A" Visibility="{Binding IsChecked, ElementName=chk_a, Converter={StaticResource boolToVis}}" />
<Label x:Name="lbl_b" Content="B" Visibility="{Binding IsChecked, ElementName=chk_b, Converter={StaticResource boolToVis}}" />
</StackPanel>
<GroupBox.Style>
<Style TargetType="GroupBox">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Visibility, ElementName=lbl_a}" Value="Collapsed" />
<Condition Binding="{Binding Visibility, ElementName=lbl_b}" Value="Collapsed" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="GroupBox.Visibility" Value="Collapsed" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</GroupBox.Style>
</GroupBox>
<CheckBox x:Name="chk_a" Content="A Visible" Grid.Column="0" Grid.Row="1" />
<CheckBox x:Name="chk_b" Content="B Visible" Grid.Column="1" Grid.Row="1" />
</StackPanel>
Ancak başka bir GroupBox yapmak veya başka bir öğe eklemek istersek, her seferinde koşulları eklemem gerekmeyecek mi? Bu MultiBinding ile aynı sorun olurdu – davidcorne