[WPF][UserControl] 之 热键设置控件(HotKeySettingControl)

在做设置面板的时候,经常需要一个可以用来设置热键的控件,记下当初实现这个控件的过程吧。。。

热键设置控件界面分为两个部分,描述文本与热键输入框,分别使用Label与TextBox控件,置于StackPanel中,

XAML代码如下:

<StackPanel Orientation="Horizontal">
<Label Name="label" Width="100" HorizontalContentAlignment="Right"></Label>
<TextBox Name="textbox" Width="100" PreviewKeyDown="textbox_PreviewKeyDown"></TextBox>
</StackPanel>

PreviewKeyDown事件处理如下:

private void textbox_PreviewKeyDown(object sender, KeyEventArgs e)
{
string keyString = e.Key.ToString();  //keyString 既获得的按键描述
SettingKey(keyString);           //存储按键
e.Handled
= true;
}

为了能够在XAML中直接使用该控件并设置热键描述文本,增加了Text方法用以设置控件描述

public string Text
{
get
{
return label.Content.ToString();
}

set
{
label.Content
= value;
}
}

刚开始在使用 Text="some text..." 方式设置文本时并没有出现问题,

但是在接下来使用DynamicResource方式使用多国语言时出现了问题,编译器提示应使用DependencyProperty进行操作,于是开始手忙脚乱开始Google DependencyProperty是什么东西。。。

使用DependencyProperty实现的Text属性如下:

View Code
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
"Text",                                   //要注册的属性名
typeof(string),                              //属性数据类型
typeof(HotKeySettingControl),                      //父对象类型
new FrameworkPropertyMetadata(
"",                                   //默认值
new PropertyChangedCallback(TextPropertyChangedCallback)   //属性改变时触发
)
);

static void TextPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
HotKeySettingControl ctl
= d as HotKeySettingControl;
ctl.label.Content
= e.NewValue as string;
}


public string Text
{
get { return GetValue(TextProperty) as string; }
set { SetValue(TextProperty, value); }
}

最终运行效果如下:

posted @ 2011-07-04 12:36  BlueGlass  阅读(1226)  评论(2编辑  收藏  举报