2013-05-30 3 views
4

Я использую следующий класс и DependencyProperty, чтобы стиль, чтобы установить изображение для кнопки:Кнопка Style работает во время выполнения, но Visual Studio показывает ошибку во время разработки

public static class ImageButton 
{ 
    public static readonly DependencyProperty ImageProperty = 
        DependencyProperty.RegisterAttached("Image", typeof(ImageSource), typeof(ImageButton), 
                            new FrameworkPropertyMetadata((ImageSource)null)); 
    public static ImageSource GetImage(DependencyObject obj) 
    { 
     return (ImageSource)obj.GetValue(ImageProperty); 
    } 

    public static void SetImage(DependencyObject obj, ImageSource value) 
    { 
     obj.SetValue(ImageProperty, value); 
    } 
} 

Я определил следующее Стиль (в ImageButton.xaml):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:vcontrols="clr-namespace:Vialis.Led.LedControl5.Controls"> 

    <ControlTemplate x:Key="ImageButtonTemplate" TargetType="Button"> 
     <Image Source="{Binding Path=(vcontrols:ImageButton.Image), 
           RelativeSource={RelativeSource FindAncestor, 
           AncestorType={x:Type Button}}}" 
       Width="{TemplateBinding Width}" 
       Height="{TemplateBinding Height}" 
       Stretch="Fill" 
       RenderTransformOrigin="0.5, 0.5"> 
      <Image.Resources> 
       <Storyboard x:Key="ShrinkStoryboard"> 
        <DoubleAnimation Storyboard.TargetName="ImageScale" 
               Storyboard.TargetProperty="(ScaleTransform.ScaleX)" 
               To="0.8" 
               Duration="0:0:0.15" 
               AutoReverse="False"/> 
        <DoubleAnimation Storyboard.TargetName="ImageScale" 
               Storyboard.TargetProperty="(ScaleTransform.ScaleY)" 
               To="0.8" 
               Duration="0:0:0.15" 
               AutoReverse="False"/> 
       </Storyboard> 
       <Storyboard x:Key="GrowStoryboard"> 
        <DoubleAnimation Storyboard.TargetName="ImageScale" 
               Storyboard.TargetProperty="(ScaleTransform.ScaleX)" 
               To="1.0" 
               Duration="0:0:0.15" 
               AutoReverse="False"/> 
        <DoubleAnimation Storyboard.TargetName="ImageScale" 
               Storyboard.TargetProperty="(ScaleTransform.ScaleY)" 
               To="1.0" 
               Duration="0:0:0.15" 
               AutoReverse="False"/> 
       </Storyboard> 
      </Image.Resources> 
      <Image.RenderTransform> 
       <ScaleTransform x:Name="ImageScale" ScaleX="1" ScaleY="1" CenterX="1" CenterY="1"/> 
      </Image.RenderTransform> 

      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup x:Name="CommonStates"> 
        <VisualState x:Name="Pressed" Storyboard="{StaticResource ShrinkStoryboard}"/> 
        <VisualState x:Name="MouseOver" Storyboard="{StaticResource GrowStoryboard}"/> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
     </Image> 
    </ControlTemplate> 

    <Style x:Key="ImageButtonStyle" TargetType="Button"> 
     <Setter Property="Opacity" Value="0.5"/> 
     <Setter Property="Template" Value="{StaticResource ImageButtonTemplate}"/> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Opacity" Value="1"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

</ResourceDictionary> 

И, наконец, для того, чтобы использовать его у меня есть что-то вроде этого:

<Button Width="32" 
     Height="32" 
     Style="{StaticResource ImageButtonStyle}" 
     vcontrols:ImageButton.Image="/Images/someimage.png"/> 

Когда я компилирую и выполняю приложение, все работает отлично. Кнопка получает изображение и использует анимации, определенные в стиле.

Во время разработки Visual Studio, похоже, не может визуализировать его, и редактор XAML показывает криволинейные линии под определением всей кнопки.

Информация об ошибке говорит:

префикс 'vcontrols' не связан с пространством имен.

Это ссылка на использование vcontrols в стиле. Если вы измените имя там, ошибка также изменится, , так что это не связано с именем, выбранным в Window/UserControl, который использует кнопку.

Что может быть причиной этого и есть способ исправить его, чтобы он работал и во время разработки?

+0

Вы пытались добавить объявление пространства имен в корневой элемент документа XAML? Может быть, Visual Studio ищет только объявления? –

+0

Попробуйте добавить биты сборки в объявлении пространства имен ... xmlns: vcontrols = "clr-namespace: Vialis.Led.LedControl5.Controls; assembly = ???" – MaLio

+0

Привет, хорошо, что сборка такая же, как и приложение (сначала это была внешняя сборка, но я решил, что перемещение элементов управления в одну и ту же сборку может решить ее ... это не так. Явно добавление: сборка = Vialis.Led .LedControl5 'тоже не помогает, это только ухудшает ситуацию. – TimothyP

ответ

2

Update 2:

Эта проблема была только с VS2012 дизайнером (в VS2010 это работает отлично), и он уже зафиксирован в Visual Studio 2012 Update 3 пластыря.

+0

Извините, что добрался до вас так поздно. В любом случае это должно быть ошибкой в ​​VS2012, потому что я получаю то же самое исключение. – TimothyP

+1

@TimothyP, я проверил его с обновлением VS2012 2 - проблема на месте. Согласно [нескольким] (https://connect.microsoft.com/VisualStudio/feedback/details/779344/vs2012-xaml-designer-fails-to-resolve-binding-to-attached-property-in-a-style) [other] (http://connect.microsoft.com/VisualStudio/feedback/details/783339/visual-studio-2012-update-2-xamlparseexception-in-wpf-designer-binding-attached-property) похоже, что вы Право - это вопрос VS2012, я считаю. Хорошие новости - это уже исправлено в [Обновление 3 RC2] (http://www.microsoft.com/en-us/download/confirmation.aspx?id=39067)! :) – Sevenate

+1

@TimothyP, я мог бы подтвердить, что эта проблема со временем разработки окончательно исправлена ​​в [** Обновление 3 RC2 **] (http://www.microsoft.com/en-us/download/details.aspx?id = 39067) - проверено на моей машине несколько минут назад. – Sevenate

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