wpf 怎么为label 添加 图标?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 怎么为label 添加 图标?相关的知识,希望对你有一定的参考价值。

参考技术A

直接定义在控件中,如下:

<Label Width="200" Height="100">

<Label.Content>

<DockPanel>

<Image Source="logo.png" Width="20" Height="20" DockPanel.Dock="Left"/>

<TextBlock Text="33333333333" DockPanel.Dock="Right" />

</DockPanel>

</Label.Content>

</Label>

 

在样式中定义如下:

    <Style x:Key="LabelStyle1" TargetType="x:Type Label">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="x:Type Label">
                            <Border BorderBrush="TemplateBinding BorderBrush" BorderThickness="TemplateBinding BorderThickness" Background="TemplateBinding Background" Padding="TemplateBinding Padding" SnapsToDevicePixels="true">
                                <DockPanel>
                                    <Image Source="logo.png" Width="20" Height="20" DockPanel.Dock="Left"/>
                                    <ContentPresenter DockPanel.Dock="Right" HorizontalAlignment="TemplateBinding HorizontalContentAlignment" RecognizesAccessKey="True" SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels" VerticalAlignment="TemplateBinding VerticalContentAlignment"/>
                                </DockPanel>
                               </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsEnabled" Value="false">
                                    <Setter Property="Foreground" Value="DynamicResource x:Static SystemColors.GrayTextBrushKey"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

追问

为什么在设计器里面可以看到 但一运行就看不到了

追答

你的图片资源属性没有配置正确。
在图片资源属性中配置
Build Aciton和Copy to Output Directory;
前者你配置成Content,后者配置为Copy always 或者 Copy if newer;
这样会在编译后的输出多一张图片。

当然你也可以将图片作为资源编译到exe中。

本回答被提问者采纳

WPF 走马灯 文字滚动 自定义控件

原文:WPF 走马灯 文字滚动 自定义控件

    /// <summary>
    /// Label走马灯自定义控件
    /// </summary>
    [ToolboxBitmap(typeof(Label))] //设置工具箱中显示的图标
    public class ScrollingTextControl : Label
    {
        /// <summary>
        /// 定时器
        /// </summary>
        Timer MarqueeTimer = new Timer();
        /// <summary>
        /// 滚动文字源
        /// </summary>
        String _TextSource = "滚动文字源";
        /// <summary>
        /// 输出文本
        /// </summary>
        String _OutText = string.Empty;
        /// <summary>
        /// 过度文本存储
        /// </summary>
        string _TempString = string.Empty;
        /// <summary>
        /// 文字的滚动速度
        /// </summary>
        double _RunSpeed = 1000;

        DateTime _SignTime;
        bool _IfFirst = true;

        /// <summary>
        /// 滚动一循环字幕停留的秒数,单位为毫秒,默认值停留3秒
        /// </summary>
        int _StopSecond = 3000;

        /// <summary>
        /// 滚动一循环字幕停留的秒数,单位为毫秒,默认值停留3秒
        /// </summary>
        public int StopSecond
        {
            get { return _StopSecond; }
            set
            {
                _StopSecond = value;
            }
        }

        /// <summary>
        /// 滚动的速度
        /// </summary>
        [Description("文字滚动的速度")] //显示在属性设计视图中的描述
        public double RunSpeed
        {
            get { return _RunSpeed; }
            set
            {
                _RunSpeed = value;
                MarqueeTimer.Interval = _RunSpeed;
            }
        }

        /// <summary>
        /// 滚动文字源
        /// </summary>
        [Description("文字滚动的Text")]
        public string TextSource
        {
            get { return _TextSource; }
            set
            {
                _TextSource = value;
                _TempString = _TextSource + "   ";
                _OutText = _TempString;
            }
        }

        private string SetContent
        {
            get { return Content.ToString(); }
            set
            {
                Content = value;
            }
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        public ScrollingTextControl()
        {
            MarqueeTimer.Interval = _RunSpeed;//文字移动的速度
            MarqueeTimer.Enabled = true;      //开启定时触发事件
            MarqueeTimer.Elapsed += new ElapsedEventHandler(MarqueeTimer_Elapsed);//绑定定时事件
            this.Loaded += new RoutedEventHandler(ScrollingTextControl_Loaded);//绑定控件Loaded事件
        }


        void ScrollingTextControl_Loaded(object sender, RoutedEventArgs e)
        {
            _TextSource = SetContent;
            _TempString = _TextSource + "   ";
            _OutText = _TempString;
            _SignTime = DateTime.Now;
        }


        void MarqueeTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (string.IsNullOrEmpty(_OutText)) return;

            if (_OutText.Substring(1) + _OutText[0] == _TempString)
            {
                if (_IfFirst)
                {
                    _SignTime = DateTime.Now;                    
                }

                if ((DateTime.Now - _SignTime).TotalMilliseconds > _StopSecond)
                {
                    _IfFirst = true; ;
                }
                else
                {
                    _IfFirst = false;
                    return;
                }
            }

            _OutText = _OutText.Substring(1) + _OutText[0];


            Dispatcher.BeginInvoke(new Action(() =>
            {
                SetContent = _OutText;
            }));


        }

    }

 

 

以上放到cs文件中 然后 编译 就可以在工具箱中看到ScrollingTextControl 名称的label控件

 

 

<Window x:Class="WpfDemoNew.Window21"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window21" Height="300" Width="300" xmlns:my="clr-namespace:WpfDemoNew.Control">
    <Grid x:Name="grid">
        <my:ScrollingTextControl Content="12345" Height="52" HorizontalAlignment="Left" Margin="10,10,0,0" x:Name="scrollingTextControl1" VerticalAlignment="Top" Width="121" Foreground="Black" />
    </Grid>
</Window>

 

以上是关于wpf 怎么为label 添加 图标?的主要内容,如果未能解决你的问题,请参考以下文章

wpf文件名显示在label中

wpf中的treeview怎样添加图标上去?

WPF中如何向Grid右下角添加控件

如何将图标添加到 WPF 应用程序桌面快捷方式?

wpf托盘图标问题

能添加图标的label