0

UserControl では、ボタンに画像を表示する必要があります (動的リソースによって提供されます)。動的リソースが利用できない場合、またはアプリケーションによって提供されない場合、ボタンにデフォルトのコンテンツを表示する必要があります。

私の考えは、デフォルトのコンテンツを画像の下にあるテキストブロックに入れ、画像ソースがnullである限り非表示にすることでした(透けて見えないように)。ただし、DynamicResource の解決に失敗した場合、この条件は機能しないようです。その場合、画像のソースの状態は正確にはどうなりますか?

<Button Command="{Binding DoSomethingCommand}">
  <Grid>
    <TextBlock Text="DefaultText" Visibility="Collapsed">
         <TextBlock.Style>
           <Style TargetType="TextBlock">
            <Style.Triggers>
              <DataTrigger Binding="{Binding ElementName=TestImage, Path=Source}" Value="{x:Null}">
                 <Setter Property="Visibility" Value="Visible"></Setter>
              </DataTrigger>
            </Style.Triggers>
           </Style>
          </TextBlock.Style>
    </TextBlock>
    <Image x:Name="TestImage" Source="{DynamicResource SomeResource}" Stretch="None"/>
    </Grid>
  </Button>

適切な解決策は何ですか?

ご協力いただきありがとうございます!

4

1 に答える 1

1

これを試して:

    <Button Command="{Binding DoSomethingCommand}">
        <Grid>
            <TextBlock Text="DefaultText" />
            <Image x:Name="TestImage" Source="{DynamicResource SomeResource}" Stretch="None"/>
        </Grid>
    </Button>

リソース ルックアップが成功した場合にのみ、TextBlock は Image によって非表示になります。

これの問題は、画像が表示されている場合にデフォルトのコンテンツが透けて見え、デフォルトのコンテンツ全体をカバーしていないことです。

じゃあこれは?

    <Button Command="{Binding DoSomethingCommand}">
        <Grid>
            <Image x:Name="TestImage" Source="{DynamicResource SomeResource}" Stretch="None"/>
            <TextBlock Text="DefaultText">
                <TextBlock.Style>
                    <Style TargetType="TextBlock">
                        <Setter Property="Visibility" Value="Collapsed" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=Source, ElementName=TestImage}" Value="{x:Null}">
                                <Setter Property="Visibility" Value="Visible" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </Grid>
    </Button>
于 2016-12-13T11:08:35.503 に答える