2013-11-27 34 views
0

創建快捷鍵我能夠在運行時創建訪問鍵按鈕內容在設計時,但不能創建WPF MVVM如何在運行時

enter image description here

btnContent - - 「C & ancel」 - 它工作完美

btnContent - 「E & xit」---不工作,當我嘗試給字符'x'的acces鍵時,

我也嘗試過(_)下劃線和「退出」,但沒有運氣。我絕對需要在字符串「退出」中加下劃線「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)。

+0

它會幫助http://stackoverflow.com/questions/3056008/wpf-underline-a-letter-in-a-label-element – Anton

+0

@安頓,thanx的答覆。已經檢查與給定的上述鏈接它不工作..是否有任何其他方式通過代碼幹什麼? – Selva

回答

0

看我真的不明白你的問題是什麼。無論如何,我創建了一個簡單的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"); 
} 

正如你所看到的,我已經在代碼中創建了內容。

P.S.如果您使用的是自定義內容模板,然後閱讀本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; 

只是用它在任何事件處理程序!

+0

我已經發布我的風格和轉換器使用請看看。感謝名單。 – Selva