سؤال

لدي التجمع عناصر تحكم Silverlight، ودعا "MySilverlightClyTrols". العديد من المجلدات في تلك الجمعية لدي فئة تمتد عمود الشبكة من بائع طرف ثالث، دعونا نسميها "myimagecolumn.cs".

لقد قمت أيضا بإنشاء قاموس مورد يسمى Generic.xaml, هذا يقع في Themes مجلد التجمع. في هذا القاموس المورد الذي حددته تحكم يسمى myimagecolumntemplate.:

<ControlTemplate x:Name="MyImageColumnTemplate" >
    <Grid Margin="8,8,4,4" MaxHeight="32" MaxWidth="32">
        <Grid.Resources>
            <localGrid:StatusColumnImageConverter x:Key="ImageContentConverter"/>
        </Grid.Resources>
        <Border Margin="5,5,0,0" Background="Black" Opacity="0.15" CornerRadius="5" />
        <Border Background="#FF6E6E6E" CornerRadius="4,4,4,4" Padding="4" Margin="0,0,5,5">
            <Border Background="White" CornerRadius="2,2,2,2" Padding="3">
                <Image Source="{Binding EditValue, Converter={StaticResource ImageContentConverter}}" Stretch="Uniform"/>
            </Border>
        </Border>
    </Grid>
</ControlTemplate>

سؤالي هو: من MyImagecolumn، كيف يمكنني الرجوع إليه برمجيا / تحميل قالب التحكم هذا حتى أتمكن من تعيينه إلى خاصية في العمود؟ أتوقع أن أستخدم بناء جملة مشابه لهذا:

ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];

ولكن هذا يعرض دائما فارغة. عندما أقوم بتحميل التجمع في العاكس، أرى أن Generic.xaml الملف موجود، اسم المورد هو MySilverlightControls.g.resources, ، والمسار في ذلك هو themes/generic.xaml.

كيف بالضبط يمكنني الوصول إلى العناصر الفردية في قاموس المورد هذا؟

هل كانت مفيدة؟

المحلول

حصلت عليه حلها.

كنت بحاجة ل:

  • تحميل قاموس المورد الخاص بي
  • دمجها مع موارد التطبيق
  • قم بتحميل قالب التحكم الخاص بي من مورد التطبيق

كجزء من تحميل قاموس المورد، كان علي أيضا تسجيل pack مخطط URI. أتضطر إلى التعامل مع بعض الاستثناءات المجنونة القائمة على الأخطاء الطفيفة مع XAML الخاص بي. اضطررت أيضا إلى تحريك XAML الخاص بي في ملف قاموس مورد منفصل، في محاولة للقيام بذلك من خلال Generic.xaml أبقى أخطاء رمي (على الرغم من أن XAML كان بلا عيب ويمكن تحميله بشكل جيد باستخدام ملف قاموس المورد الذي تم إنشاؤه حديثا). لذلك، تبسيطها، وكان هذا الرمز:

if (!UriParser.IsKnownScheme("pack"))
    UriParser.Register(new GenericUriParser(GenericUriParserOptions.GenericAuthority), "pack", -1);

ResourceDictionary dict = new ResourceDictionary();
Uri uri = new Uri("/MySilverlightControls;component/themes/Dictionary1.xaml", UriKind.Relative);
dict.Source = uri;
Application.Current.Resources.MergedDictionaries.Add(dict);
ControlTemplate ct = (ControlTemplate)Application.Current.Resources["MyImageColumnTemplate"];

لقد نشرت التفاصيل الكاملة لهذا الحل في هذه المدونة post..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top