簡體   English   中英

在WPF項目中查找未凍結的畫筆

[英]Find unfrozen brushes in wpf project

我試圖弄清楚如何在Applications資源中找到所有不是Freeze="true" Brush對象。

到目前為止,我所做的是:

var temp = this.FindLogicalChildren<Brush>();
var resourceDictionary = Application.Current.Resources;

var resources = GetResources(resourceDictionary);

var brushes = resources.Cast<DictionaryEntry>()
     .Where(e => e.Value is Brush).Where(e => !(e.Value as Brush)?.IsFrozen ?? false);
foreach (var entry in brushes)
   ....

但是,這種方法不能滿足標准。 知道我在這里想念什么嗎?

因此,我發現這個緩存的網站似乎可以提供答案:

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj)
    where T : DependencyObject
    {
        if (depObj != null)
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                if (child != null && child is T)
                {
                yield return (T)child;
                }
                foreach (T childOfChild in FindVisualChildren<T>(child))
                {
                yield return childOfChild;
                }
            }
        }
    }
    foreach (Freezable item in FindVisualChildren<Freezable>(myWin))
    if( item != null && item.CanFreeze)item.Freeze();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM