如果图像(来自动态资源)不可用,则按下默认内容

时间:2016-12-13 10:57:57

标签: c# wpf image button dynamicresource

在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>

什么是合适的解决方案?

感谢您的帮助!

1 个答案:

答案 0 :(得分: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>