InvalidOperationException в VS2010 - PullRequest
       1

InvalidOperationException в VS2010

3 голосов
/ 03 декабря 2010

Я использую Expression Blend 4 + Visual Studio 2010 Pro для создания приложения WPF.

Я создал стиль элемента управления (или я должен сказать «Шаблон») на основе CheckBox, используя только смесь 4, которая отлично работает. Однако, когда я иду на VS2010, я получаю следующую «ошибку»:

Свойство [Unknown] не указывает на DependencyObject в пути '(0). (1) [0]. (2)'. * * +1006

Даже если я запускаю приложение, оно прекрасно работает. Мне не нужно исправлять эту ошибку, но я все равно хотел бы от нее избавиться.

Вот код XAML стиля:

<Style x:Key="IRSensorCheckBoxStyle" TargetType="{x:Type CheckBox}">
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type CheckBox}">
          <Grid Cursor="Hand">
            <VisualStateManager.VisualStateGroups>
              <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal">
                  <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="ellipse">
                      <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0"/>
                    </DoubleAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="MouseOver">
                  <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="ellipse">
                      <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="2"/>
                    </DoubleAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Pressed">
                  <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.StrokeThickness)" Storyboard.TargetName="ellipse">
                      <EasingDoubleKeyFrame KeyTime="0" Value="2"/>
                    </DoubleAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Disabled"/>
              </VisualStateGroup>
              <VisualStateGroup x:Name="CheckStates">
                <VisualState x:Name="Checked">
                  <Storyboard>
                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse">
                      <EasingColorKeyFrame KeyTime="0:0:0.3" Value="Red"/>
                    </ColorAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Unchecked">
                  <Storyboard>
                    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse">
                      <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#00FF0000"/>
                    </ColorAnimationUsingKeyFrames>
                  </Storyboard>
                </VisualState>
                <VisualState x:Name="Indeterminate"/>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
            <Ellipse x:Name="ellipse" Stroke="Yellow" StrokeThickness="0">
              <Ellipse.Fill>
                <RadialGradientBrush>
                  <GradientStop Color="Red"/>
                  <GradientStop Offset="1" Color="#00FF0000"/>
                </RadialGradientBrush>
              </Ellipse.Fill>
            </Ellipse>
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>

Как вы можете видеть ссылки на ошибки для раскадровок в состояниях Проверено и Не проверено. Однако я не согласен с ошибкой в ​​том, что свойство не указывает на DependencyObject (что бы это ни было ...), потому что цель - это "эллипс", который там есть; и свойство Target указывает на заполнение формы, которое находится прямо здесь (заполнение эллипса); в GradientStops [0] GreadientBrush, в котором есть 2 GradientStops в RadialGradientBrush; и, наконец, к свойству Color GradientStop, которое также там.

У кого-нибудь есть предложения?

Заранее спасибо.

1 Ответ

2 голосов
/ 06 декабря 2010

Кто-то помог мне с решением (я не знаю, назовите ли вы это прямым решением или обходным путем):

Если вы дадите имя GradientStop, вы можете ссылаться на его свойство Color.напрямую:

<Ellipse.Fill>
  <RadialGradientBrush>
    <GradientStop x:Name="Offset0" Color="Red"/>
    <GradientStop x:Name="Offset1" Offset="1" Color="#00FF0000"/>
  </RadialGradientBrush>
</Ellipse.Fill>

[...]

<VisualState x:Name="Checked">
  <Storyboard>
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Color" Storyboard.TargetName="Offset0">
      <EasingColorKeyFrame KeyTime="0:0:0.3" Value="Red"/>
    </ColorAnimationUsingKeyFrames>
  </Storyboard>
</VisualState>
<VisualState x:Name="Unchecked">
  <Storyboard>
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Color" Storyboard.TargetName="Offset0">
      <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#00FF0000"/>
    </ColorAnimationUsingKeyFrames>
  </Storyboard>
</VisualState>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...