EventSetter - ошибка XAML в конструкторе Visual Studio - PullRequest
2 голосов
/ 08 июня 2010

Я сделал все TreeView с XAML, но теперь я хотел бы управлять событием с выделенным кодом.HierarchicalDataTemplate содержит изображение.Мне нужно захватить события MouseEnter / MouseLeave на изображении.Я пытался таким образом:

<Image x:Name="imgArticolo" Source="{Binding imgArt}"> 
    <Image.Style> 
        <Style TargetType="{x:Type Image}"> 
            <EventSetter Event="MouseEnter" Handler="iArt_MouseEnter"/> 
        </Style> 
    </Image.Style> 
</Image> 

Но в конструкторе Visual Studio появляется ошибка: «Невозможно загрузить файл XAML с EventSetter».

Как можно исправить?Спасибо!Pileggi

Ответы [ 3 ]

2 голосов
/ 08 июня 2010

Похоже, это известная ошибка . Вы можете решить эту проблему, просто переместив Style с EventSetters в основную область Resources и включив его в DataTemplate как StaticResource:

<Style x:Key="myImageStyle" TargetType="{x:Type Image}">
    <EventSetter Event="MouseEnter" Handler="iArt_MouseEnter"/>
</Style>
<HierarchicalDataTemplate x:Key="modTreeArtDataParts2">
    <Grid>
        <Border x:Name="bdArt">
            <Image x:Name="imgArticolo" Source="{Binding imgArt}" Height="Auto" 
                   Style="{StaticResource myImageStyle}" />
        </Border>
    </Grid>
</HierarchicalDataTemplate>
0 голосов
/ 08 июня 2010

Большое спасибо и извините, если моей информации было недостаточно! Это код XAML (очищен от всего, что не имеет ничего общего), без исправленных строк он работает хорошо.

<TreeView x:Name="tvArt"
    ItemTemplate = "{DynamicResource modTreeArtDataParts}"
    ItemsSource = "{Binding RicambiList, Source={StaticResource P_RicambiDataSource}}"/>

<HierarchicalDataTemplate x:Key="modTreeArtDataParts"
    ItemsSource = "{Binding RicambiItemList}"
    ItemTemplate="{StaticResource modTreeArtDataParts2}">
    <Grid>
        ...
    </Grid>
</HierarchicalDataTemplate>

<HierarchicalDataTemplate x:Key="modTreeArtDataParts2">
    <Grid>
        <Border x:Name="bdArt">
            <Image x:Name="imgArticolo" Source="{Binding imgArt}" Height="Auto">
        <!-- refused rows -->
                <Image.Style>
                    <Style TargetType="{x:Type Image}">
                        <EventSetter Event="MouseEnter" Handler="iArt_MouseEnter"/>
                    </Style>
                </Image.Style>
            </Image>
        </Border>
    </Grid>
</HierarchicalDataTemplate>

Я использую Visual Studio Professional 2008 SP1 DataContext является классом с 2 ObservableCollection Шаблон данных находится в Window.Reference

0 голосов
/ 08 июня 2010

Не могли бы вы предоставить немного больше контекста? Я не смог воспроизвести вашу ошибку в VS 2008 со следующим простым XAML:

<Window x:Class="WpfWindow.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
  <Window.Resources>
    <HierarchicalDataTemplate x:Key="template"
                              ItemsSource="{Binding Children}">
      <Image x:Name="imgArticolo"
             Source="{Binding imgArt}">
        <Image.Style>
          <Style TargetType="{x:Type Image}">
            <EventSetter Event="MouseEnter"
                         Handler="iArt_MouseEnter" />
          </Style>
        </Image.Style>
      </Image>
    </HierarchicalDataTemplate>
  </Window.Resources>
  <Grid>
    <TreeView ItemTemplate="{StaticResource template}">
      <TreeViewItem Header="Hey" />
    </TreeView>
  </Grid>
</Window>

Какую версию Visual Studio вы используете? Что находится в DataContext? Где находится ваш шаблон данных? Как вы относитесь к этому?

PS: Вы также можете попробовать подключить отказавший конструктор с помощью отладчика из другого экземпляра Visual Studio. Не забудьте установить перерыв на все исключения . Это может дать больше информации о том, что на самом деле там происходит.

PPS: Если ничего не помогает, вы можете использовать прикрепленное поведение для достижения того же результата.

...