Почему у меня есть проблема с привязкой к изображению из шаблона элемента управления? - PullRequest
1 голос
/ 18 ноября 2008

У меня есть стиль для элемента управления, который привязывается к изображению в цели, он появляется только в том случае, если цель также привязывается к изображению, и я понятия не имею, почему ... кто-то может пролить свет это для меня?

Упрощенная версия моего стиля:

<Style x:Key="testStyle" TargetType="ItemsControl">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" LastChildFill="True">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="32"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <Grid Grid.Row="0" DockPanel.Dock="Top" MinHeight="25" SnapsToDevicePixels="True">
                                <StackPanel Orientation="Horizontal">
                                    <Image Margin="10,0,10,0" VerticalAlignment="Stretch" Height="24" Width="24"  Source="{Binding Path=HeaderImage}" />
                                    <TextBlock FontFamily="Tahoma" VerticalAlignment="Center" Text="{Binding Path=HeaderInfo}" />
                                </StackPanel>
                                <Line VerticalAlignment="Bottom" Stretch="Fill"/>
                            </Grid>
                            <ItemsPresenter Grid.Row="1"/>
                        </Grid>
                    </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Мой пользовательский контроль:

<UserControl x:Class="StartPageView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<ItemsControl Style="{DynamicResource testStyle}">
    <Grid HorizontalAlignment="Stretch" >
        <StackPanel>
        <GroupBox Header="Information"  Margin="0,0,0,10" >
            <Label Margin="10,10,10,110">some useful information, dynamically updated</Label>
        </GroupBox>
        <GroupBox Header="Available actions" Margin="0,10,0,10">
            <StackPanel>
                <Label Margin="10,10,10,10">action 1</Label>
                <Label Margin="10,10,10,10">action 2</Label>
                <Label Margin="10,10,10,10">action 3</Label>
                    <!--<Image Width="0" Height="0" Source="{Binding HeaderImage}"/>-->
                </StackPanel>
        </GroupBox>
        </StackPanel>
    </Grid>
</ItemsControl>

И мой код модели (заданный в качестве контекста данных для моего пользовательского элемента управления)

internal class StartPageViewPresentationModel : IStartPageViewPresentationModel
{
    public StartPageViewPresentationModel(IStartPageView view)
    {
        HeaderImage = new BitmapImage(new Uri(@"Images/home_16.png", UriKind.Relative)) { CacheOption = BitmapCacheOption.Default };

        HeaderInfo = "Start Page";

        View = view;
        View.Model = this;
    }

    public BitmapImage HeaderImage { get; set; }

    public string HeaderInfo { get; set; }

    public IStartPageView View { get; set; }
}

Если я откомментирую тег в пользовательском элементе управления, тогда изображение будет отображаться как в элементе управления, так и в области шаблона, если я его прокомментирую, оно также не появится. Текстовая привязка из шаблона отлично работает

Я в замешательстве ..

спасибо

Тревор

1 Ответ

2 голосов
/ 18 ноября 2008

Пара предложений:

  1. Вы пробовали абсолютный URI для изображения?
  2. HeaderImage может относиться к типу ImageSource, а не к более строгим BitmapImage.

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

Однако, когда вы комментируете, что изображение разрешается из местоположения Style, что может быть неверным?

...