在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>
什么是合适的解决方案?
感谢您的帮助!
答案 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>