0

在 UserControl 中,我希望按钮显示图像(由动态资源提供)。如果动态资源不可用/由应用程序提供,我希望按钮显示一些默认内容。

我的想法是将默认内容放入位于图像下方的文本块中,只要图像源为空,就将其隐藏(因此它不会发光)。但是,如果解析 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 回答