2016-12-13 2 views
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> 

Что было бы правильным решением?

Благодарим за помощь!

+0

В части зрения i.e на стороне пользовательского интерфейса, как вы определяете, недоступно ли изображение в динамическом ресурсе? –

+0

Вы пробовали использовать [FallbackValue] (https://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.fallbackvalue (v = vs.110) .aspx)? – lena

+0

FallbackValue недоступен, так как нет привязки. – tabina

ответ

1

Попробуйте это:

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

Объект TextBlock будет скрыт изображения только тогда, когда поиск ресурса преуспевает.

Проблема с этим в том, что содержание по умолчанию просвечивает, если изображение показывает и оно не охватывает все содержимое по умолчанию

Что об этом тогда?

<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> 
+0

Проблема заключается в том, что содержимое по умолчанию светит, если изображение отображается, и оно не распространяется на весь контент по умолчанию. – tabina

+0

См. Мой отредактированный ответ. – mm8

+0

Это странно: добавление строки <Свойство Setter = "Видимость" Value = "Collapsed" /> в стиль делает трюк. Порядок TextBlock и Image в Grid кажется неактуальным. В чем отличие настройки видимости непосредственно в TextBlock? – tabina

Смежные вопросы