代码后面的WPF样式不适用

时间:2018-07-26 02:50:25

标签: wpf

我必须在我们的应用程序中单击一个按钮后创建一个分隔符控件。 样式应该来自资源字典。

它是这样的:

        var separator = new Separator();
        try
        {

            separator.Style =  (Style)TryFindResource("columnseperatorStyle");
        }
        catch
        {

        }

问题在于它无法在运行时中呈现,我已经检查了属性,并将样式应用于分隔符。

有人可以照亮吗?

*其他信息

这就是我定义位于单独资源字典中的样式的方式。

<Style x:Key="columnseperatorStyle" TargetType="{x:Type Separator}"> 
    <Setter Property="Width"
            Value="2" />
    <Setter Property="HorizontalAlignment"
            Value="Left" />
    <Setter Property="Background"
            Value="Red" />
</Style>

我发现检索样式没有问题。我的临时解决方案是在对象的单独实例中检索样式。见下文

 separator = new Separator();
 separator.Style =  (Style)TryFindResource("columnseperatorStyle");

                /*Applying styles to the separator object like below:

                    var separator = new Separator()
                    {
                        Style =  (Style)TryFindResource("columnseperatorStyle");
                    }

                   Does not render the style in the runtime, i don't know why?.
                 */             
                separator = new Separator()
                {
                    Name = colName,
                    Background = separator.Background,
                    Width = separator.Width,
                    HorizontalAlignment = separator.HorizontalAlignment
                };

            grdData.Children.Add(separator);  

我想知道为什么使用直接分配样式不能在运行时呈现样式:

        separator.Style =  (Style)TryFindResource("columnseperatorStyle");

*新更新

我最终使用了线路控制。 :))带有分隔符控件的东西..它不能直接应用样式。

 if (line == null)
        {
            line = new Line()
            {
                Name = colName,
                Style = (Style)TryFindResource("columnLineStyle")
            };

            var relativePoint =     btn.TransformToAncestor(grdData).Transform(new Point(0, 0));
            line.Margin = new Thickness(relativePoint.X + 3, 0, 0, 0);

            grdData.Children.Add(line);
        }
        else
        {
            grdData.Children.Remove(line);
        }

0 个答案:

没有答案