【问题标题】:WPF MVVM how to create access key on run timeWPF MVVM如何在运行时创建访问密钥
【发布时间】:2013-11-27 11:32:07
【问题描述】:

我可以在设计时为按钮内容创建访问键,但在运行时无法创建

btnContent -- "C&ancel" -- 完美运行

btnContent -- "E&xit" --- 不起作用,当我尝试为字母“x”提供访问密钥时

我也尝试过 (_)underscore 和 "Exit" ,但没有运气。我只需要在字符串“Exit”中加下划线'x'。

下面是我的按钮样式

     <Style x:Key="LTC_ButtomForm_A" TargetType="{x:Type Button}">
                <Style.Resources>
                    <converter:ConverterFirstPartTextButton x:Key="ConverterFirstPartTextButton" />
                    <converter:ConverterUnderlineTextButton x:Key="ConverterUnderlineTextButton" />
                    <converter:ConverterLastPartTextButton x:Key="ConverterLastPartTextButton" />
                </Style.Resources>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border x:Name="Fondo" Margin="0" Padding="10,0" Background="#FF253A94" BorderBrush="#00000000" BorderThickness="1" CornerRadius="5">

    Text="{TemplateBinding Content,Converter={StaticResource ConverterFirstPartTextButton}}" TextAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center">
<Run Text="{TemplateBinding Content, Converter={StaticResource ConverterUnderlineTextButton}}" TextDecorations="Underline" />
<Run Text="{TemplateBinding Content, Converter={StaticResource ConverterLastPartTextButton}}" />
 </TextBlock>
         </Border>
     </ControlTemplate>
     </Setter.Value>
     </Setter>
     </Style>

在哪里 ConverterFirstPartTextButton

Public Class ConverterFirstPartTextButton
    Implements IValueConverter

#Region "IValueConverter Members"

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object _
        Implements IValueConverter.Convert
        Dim part As String = String.Empty
        If value IsNot Nothing Then
            part = value.ToString().Split("&").FirstOrDefault()
        End If
        Return part
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) _
        As Object Implements IValueConverter.ConvertBack
        Return value
    End Function

#End Region
End Class

ConverterUnderlineTextButton

Public Class ConverterUnderlineTextButton
    Implements IValueConverter

#Region "IValueConverter Members"

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object _
        Implements IValueConverter.Convert
        Dim underlineLetter As String = String.Empty
        If value IsNot Nothing Then
            underlineLetter = value.ToString().Split("&").LastOrDefault
        End If
        If underlineLetter = value Then
            Return String.Empty
        Else
            underlineLetter = underlineLetter.Substring(0, 1)
            Return underlineLetter
        End If
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) _
        As Object Implements IValueConverter.ConvertBack
        Return value
    End Function

#End Region
End Class

ConverterLastPartTextButton

Public Class ConverterLastPartTextButton
    Implements IValueConverter

#Region "IValueConverter Members"

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object _
        Implements IValueConverter.Convert
        Dim part As String = String.Empty
        If value IsNot Nothing Then
            part = value.ToString().Split("&").LastOrDefault
        End If
        If part <> value And part.Length > 1 Then
            part = part.Substring(1)
            Return part
        Else
            Return String.Empty
        End If
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) _
        As Object Implements IValueConverter.ConvertBack
        Return value
    End Function

#End Region
End Class

这些转换的主要用途是在初始化期间为给定文本及其工作完美添加下划线。但是当我在运行时更改内容时,它显示如上图(图 2)。

【问题讨论】:

标签: wpf button text mvvm runtime


【解决方案1】:

你看我真的不明白你的问题是什么。无论如何,我创建了一个简单的 wpf 应用程序并在网格上放置了一个按钮。

 <Grid>
        <Button Name="btnButton1" Width="150" Height="70" Click="btnButton1_Click" />
 </Grid>

在代码之后

 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
    btnButton1.Content = "E_xit";
 }

所以现在当我按住 Alt 时,字母 x 会加下划线。如果按下 Alt 时按下 x,则触发 btnButton1_Click 事件并看到一个消息框。

private void btnButton1_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("1111");
}

如您所见,我已经在代码中创建了内容。

附:如果您使用的是自定义内容模板,请阅读此custom content template

如果你只需要给一个字母加下划线那么

            StackPanel stackPanel = new StackPanel();
            stackPanel.Orientation = Orientation.Horizontal;
            stackPanel.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;

            TextBlock textBlock = new TextBlock();
            textBlock.Text = "E";
            stackPanel.Children.Add(textBlock);

            textBlock = new TextBlock();
            textBlock.TextDecorations = System.Windows.TextDecorations.Underline;
            textBlock.Text = "x";
            stackPanel.Children.Add(textBlock);

            textBlock = new TextBlock();
            textBlock.Text = "it";
            stackPanel.Children.Add(textBlock);

            btnButton1.Content = stackPanel;

只需在任何事件处理程序中使用它!

【讨论】:

  • 我已经发布了我使用的样式和转换器,请看一下。谢谢。
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多