在' Xceed.Wpf.Toolkit.BusyIndi​​cator'的名称范围内找不到名称。

时间:2014-07-07 10:12:50

标签: c# wpf xceed

我正在尝试使用波纹管XAML在BusyIndi​​cator中实现文本滚动。我正在获取与访问TargetName相关的异常。有人可以帮忙吗?

背后的代码

// Locate Storyboard resource
Storyboard s = (Storyboard)TryFindResource("animation");
s.Begin(bsi_Indicator);

XAML代码:

<xctk:BusyIndicator IsBusy="True" x:Name="bsi_Indicator">
        <xctk:BusyIndicator.BusyContentTemplate>  
            <DataTemplate>
                    <StackPanel Margin="4">
                        <Canvas Name="canvas1" Height="32" ClipToBounds="True"  VerticalAlignment="Top">
                        <TextBlock Name="ScrollText" FontFamily="Verdana" FontSize="12" Text="{Binding Path=DataContext.WaitText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" >
                            <TextBlock.Resources>
                                <Storyboard x:Key="animation" Storyboard.TargetProperty="(Canvas.Left)" RepeatBehavior="Forever" >
                                    <DoubleAnimation Storyboard.TargetName="ScrollText" From="0" To="-50" Duration="0:0:10"  />
                                </Storyboard>
                            </TextBlock.Resources>
                        </TextBlock>
                    </Canvas>
                        <ProgressBar Value="100" Height="20"/>
                    </StackPanel>
            </DataTemplate>
        </xctk:BusyIndicator.BusyContentTemplate>

        <xctk:BusyIndicator.ProgressBarStyle>
            <Style TargetType="ProgressBar">
                <Setter Property="Visibility" Value="Collapsed"/>
            </Style>
        </xctk:BusyIndicator.ProgressBarStyle>
        <ContentControl />
    </xctk:BusyIndicator>

错误:

Additional information: 'ScrollText' name cannot be found in the name scope of 'Xceed.Wpf.Toolkit.BusyIndicator'.

1 个答案:

答案 0 :(得分:0)

我认为您的Storyboard已在Window资源中定义,例如,如果这是您的主要控制权。

找不到ScrollText,因为它不在家长控制的范围内,而{strong}又可能是Window 。它也加载在一个BusyContentTemplate中,DataTemplateXceed的工作方式可能有所不同,它可能会延迟加载,因此有可能它不存在。

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    var dp = bsi_Indicator.BusyContentTemplate.LoadContent() as StackPanel;
    var canvas = dp.Children[0] as Canvas;
    var textBlock = canvas.Children[0] as TextBlock;
    var sb = textBlock.Resources["animation"] as Storyboard;
    sb.Begin(textBlock); // you can just call sb.Begin() too
}