문제

내 Button isEnabled를 내 StackPanel Children(자녀 있음)에 바인딩할 수 있는지 궁금합니다.스택 패널에 자식이 있으면 내 버튼이 활성화되고 자식이 없으면 내 버튼이 비활성화됩니다.현재는 이것을 코드로 처리하지만 이것이 바인딩할 수 있는 것인지 궁금해지기 시작했습니다.어떤 생각이라도 주셔서 감사합니다...

도움이 되었습니까?

해결책

실제로 bool을 다루기 때문에 논리를 반전시키고 변환기 없이 수행할 수 있습니다.

<StackPanel Name="sp" />
<Button Content="A Button">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=sp, Path=Children.Count}" Value="0">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

이것을 사용하면 이후 업데이트를 얻는 것과 관련하여 몇 가지 문제가 발생합니다. Children.Count DP가 아닌 경우 다음을 사용할 수 있습니다. ItemsControl 하지만 그 문제를 해결하려면 (거의 다음과 같이 동작합니다. StackPanel 기본적으로):

<ItemsControl Name="ic" />
<Button Content="A Button">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ic, Path=Items.Count}" Value="0">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

다른 팁

당신은 당신을 위해 그 논리를하는 간단한 valueconverter를 쓸 수 있습니다.버튼의 IsEnabled를 StackPanel 및 가치 변환기에 바인딩하십시오. 자식이 있는지 확인한 다음 true / false를 반환하십시오.

H.B.는 자식이없는 경우 크기가 0이되므로 ItemsPanelActualHeight 속성에 바인딩 될 수 있습니다.

<Style.Triggers>
  <DataTrigger Binding="{Binding ElementName=sp, Path=ActualHeight}" Value="0">
    <Setter Property="IsEnabled" Value="False"/>
  </DataTrigger>
</Style.Triggers>
.

Per StackPanel가 제대로 축소되지 않으면 VerticalAlignment="Top"를 사용해야 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top