How to open Color and Font Dialog box using WPF?

2019-02-19 04:41发布

I want to show the color and font dialog box in WPF .net 4.5, how to can I do? Please help me anybody.

Thnx in Advanced!

标签: wpf dialog
2条回答
趁早两清
2楼-- · 2019-02-19 05:30

You can use classes from System.Windows.Forms, there is nothing wrong with using them. You'll probably need to convert values to WPF-specific though.

Alternatively, you can implement your own dialogs or use third-party controls, see Free font and color chooser for WPF?.

查看更多
Animai°情兽
3楼-- · 2019-02-19 05:33

The best out of the box solution is using FontDialog form System.Windows.Forms assembly, but you will have to convert it's output to apply it to WPF elements.

FontDialog fd = new FontDialog();
var result = fd.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
    Debug.WriteLine(fd.Font);

    tbFonttest.FontFamily = new FontFamily(fd.Font.Name);
    tbFonttest.FontSize = fd.Font.Size * 96.0 / 72.0;
    tbFonttest.FontWeight = fd.Font.Bold ? FontWeights.Bold : FontWeights.Regular;
    tbFonttest.FontStyle = fd.Font.Italic ? FontStyles.Italic : FontStyles.Normal;

    TextDecorationCollection tdc = new TextDecorationCollection();
    if (fd.Font.Underline) tdc.Add(TextDecorations.Underline);
    if (fd.Font.Strikeout) tdc.Add(TextDecorations.Strikethrough);
    tbFonttest.TextDecorations = tdc;
}

Notice that winforms dialog does not support many of WPF font properties like extra bold fonts.

Color dialog is much easier:

ColorDialog cd = new ColorDialog();
var result = cd.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
    tbFonttest.Foreground = new SolidColorBrush(Color.FromArgb(cd.Color.A, cd.Color.R, cd.Color.G, cd.Color.B));
}

It does not support alpha though.

查看更多
登录 后发表回答