0

UI にトグル ボタンがあり、クリックされたときに何らかのアクションを実行したいと考えています。

このボタンの xaml:

      <ToggleButton x:Name="markToggle" Click="markToggle_Click" Style="{StaticResource StyleMarkToggle}" >
         <ToggleButton.Content>
           <StackPanel x:Name="markToggle_Button" Orientation="Horizontal">
             <Image x:Name="Icon" Source="{Binding MarkToggleIcon}" Stretch="None" />
             <TextBlock x:Name="Counter" TextWrapping="Wrap" Text="{Binding ButtonText}" Margin="6,0,0,0" />
           </StackPanel>
         </ToggleButton.Content>
      </ToggleButton>

このトグルボタンをクリックすると、テキストブロック(名前:カウンター)の前景色を変更したいです。Storyboard.Target (または TargetName) からこのテキスト ボックス要素にアクセスするにはどうすればよいですか?

「StyleMarkToggle」スタイルの xaml コードは次のとおりです。

(以下のコードでは、「チェック済み」の表示状態のみが示されています。)

<VisualState x:Name="Checked">
 <Storyboard>
      <ColorAnimation Duration="0" To="White" Storyboard.TargetName="{Binding ElementName=Counter}" Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)" />
 </Storyboard>

次のランタイム エラーが表示されます。

MS.Internal.WrappedException: Cannot resolve TargetName System.Windows.Controls.TextBlock. ---> System.InvalidOperationException: Cannot resolve TargetName System.Windows.Controls.TextBlock.
   at MS.Internal.XcpImports.VisualStateManager_GoToStateInternal(Control reference, FrameworkElement root, VisualStateGroup group, VisualState state, Boolean useTransitions, Boolean& refreshInheritanceContext)
   at System.Windows.VisualStateManager.RetryGoToStateAfterRefreshingInheritanceContext(Control control, FrameworkElement templateRoot, VisualStateGroup group, VisualState state, Boolean useTransitions)
   at System.Windows.VisualStateManager.GoToState(Control control, String stateName, Boolean useTransitions)
   at System.Windows.Controls.Primitives.ToggleButton.ChangeVisualState(Boolean useTransitions)
   at System.Windows.Controls.Primitives.ToggleButton.OnApplyTemplate()
   at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
4

1 に答える 1

0

を使用する代わりに、要素のプロパティを要素のプロパティにStoryboardバインドし、 a を使用してから に変換できます。ForegroundTextBlockIsCheckedToggleButtonConverterboolSolidColorBrush

変更された XAML は次のとおりです。

<ToggleButton x:Name="markToggle" Click="markToggle_Click" Style="{StaticResource StyleMarkToggle}" >
    <ToggleButton.Content>
        <StackPanel x:Name="markToggle_Button" Orientation="Horizontal">
            <Image x:Name="Icon" Source="{Binding MarkToggleIcon}" Stretch="None" />
            <TextBlock Foreground="{Binding ElementName=markToggle, Path=IsChecked, Converter={StaticResource BoolToColorConverter}}" x:Name="Counter" TextWrapping="Wrap" Text="{Binding ButtonText}" Margin="6,0,0,0" />
        </StackPanel>
    </ToggleButton.Content>
</ToggleButton>

そして、コンバーターのコード:

public class BoolToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((bool)value)
            return new SolidColorBrush(Colors.White);
        else
            return new SolidColorBrush(Colors.Black);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
于 2013-02-06T10:38:58.667 に答える