WPF - элементы управления внутри списка - PullRequest
1 голос
/ 13 октября 2010

Я показываю изображения внутри списка. Если URL-адрес изображения не имеет изображения, значит, он будет отображать текстовый блок с названием книги и именем автора.

Проблема: если изображение доступно, я хочу скрыть текстовый блок.

Код:

  <local:ImageConverter x:Key="myImageConverter"/>
    <Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Padding" Value="2,0,0,0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Grid Width="150">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>

                        <Image HorizontalAlignment="Center" Grid.Row="0" VerticalAlignment="Center"  x:Name="img" Source="{Binding ImageUrl}" Height="74" Stretch="Fill" Width="75"/>

                            -<TextBlock Name="txtblkImg"  HorizontalAlignment="Center" VerticalAlignment="Center" Height="74" Width="75">
                        <TextBlock Text="{Binding Title}"/><LineBreak/>
                        <TextBlock Text="by "/>
                        <TextBlock Text="{Binding Author1}"/>
                                </TextBlock>                                                       

                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 Ответ

1 голос
/ 13 октября 2010

Вы можете предоставить логическое значение в вашей ViewModel, которое описывает, существует ли изображение, а затем установить видимость трех текстовых блоков (или панели, обертывающих их) для привязки к изображению, используя BooleanToVisibilityConverter.

C #:

public bool ImageUrlIsNotValid 
{
    get 
    {
        // Test to see if the specified file exists
    } 
}

XAML: В ресурсах

<BooleanToVisibilityConverter x:Key="boolToVisibilityConverter"/>

и в коде, показанном выше:

<StackPanel Orientation="Horizontal" Visibility="{Binding ImageUrlIsNotValid, Converter={StaticResource boolToVisibilityConverter}}">
  <TextBlock Text="{Binding Title}"/><LineBreak/>
  <TextBlock Text="by "/>
  <TextBlock Text="{Binding Author1}"/>
</StackPanel>
...