سؤال

أواجه صعوبة في محاولة للحصول بسيط جدا سيناريو العمل مع المنشور 2.0 ل WPF.أريد الرئيسية workarea طلبي أن يكون TabControl.في كل مرة أود أن أضيف رأي أريد أن تظهر TabItem على TabControl.

يبدو سهلا أليس كذلك ؟

بلدي المنطقة التي هو في قذيفة.XAML يبدو مثل هذا:

<Controls:TabControl 
    Name="MainRegion" 
    cal:RegionManager.RegionName="{x:Static Infrastructure:RegionNames.TabRegion}"
    ItemContainerStyle="{StaticResource ShellTabItemStyle}" />

نمط: ShellTabItemStyle يبدو مثل هذا:

<Style x:Key="ShellTabItemStyle" TargetType="{x:Type TabItem}">
    <Setter Property="Header" Value="{Binding Content.DataContext.HeaderInfo, RelativeSource={RelativeSource Self}}" />
</Style>

هذا ينبغي أن تحدد Header من TabItem إلى HeaderInfo مكان الإقامة على DataContext من رأي.(حصلت على هذه الفكرة من هذه المادة) على DataContext من وجهة نظري بسيط جدا Presenter التي لديها HeaderInfo مكان الإقامة على ذلك:

public string HeaderInfo = "The Header Text";

رأيي هو بسيط WPF usercontrol و يبدو مثل هذا:

  <StackPanel>
    <TextBox Text="Hello World" Name="MyTextBox"></TextBox>
    <Image Source="..SomeImage.PNG" Name="MyImage"></Image>
  </StackPanel>

جيد جدا حتى الآن.إذا أضيف رأي إلى المنطقة أحصل على علامة التبويب التحكم و أحصل على علامة التبويب مع النص تعيين "نص الرأس".مشكلتي هي أنه ليس هناك أي محتوى يظهر على علامة التبويب.من وجهة نظري يحتوي على بسيط Image و TextBox, لكن أيا منهما لا تظهر في TabItem.إذا كنت الخروج سنوب و انظر من حولك, لا يوجد صورة في الأفق.

ما أنا في عداد المفقودين هنا هل هناك طريقة أسهل ؟

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

المحلول

وكنت غير قادر على الحصول على أي من الإجابات المقترحة للعمل. لم غوغلينغ واسعة لا يساعد أيضا. أعطى مشكلة بعض التفكير في عطلة نهاية الأسبوع وكلما فكرت في ذلك، كلما حدث لي أن هناك نوعا من <قوية> كود رائحة حول هذا النهج. قمت بحقن وجهة نظر إلى علامة التبويب المنطقة ... بعض الاشياء السحرية يحدث ويحصل على إضافة علامة تبويب ... لديك لإضافة بعض الحيوية imcomprehensible ملزمة لبعض التصميم XAML تخزينها في ملف في مكان ما، وهذا قد أو قد لا تعيين نص رأس الخاص بك . إذا كان أي عنصر واحد من هذا الخطأ قليلا فقط أنك لن تحصل على خطأ ولكنه فقط لن ينجح.

في رأيي هذا هو على حد سواء هش (أي من السهل جدا لكسر) وinpenetrable جدا لم يكن لديك PRISM فهم عميق، والنموذج، وXAML. لحسن الحظ هناك طريقة ألطف بكثير وأسهل للقيام بذلك:

وببساطة إنشاء طريقة عرض تسمى <م> TabRegionView الذي يحتوي فقط على TabControl علبة فارغة. ربما كنت ترغب في إضافة هذا إلى Shell.xaml الخاص بك. إنشاء حدث يسمى <م> InjectTabView التي لديها الحمولة من نوع UserControl والاشتراك في هذا الحدث الخاص بك في TabRegionView السيطرة. عندما وقع الحدث في TabRegionView ، يمكنك إنشاء TabItem يدويا وإضافة بغية TabItem مثل ذلك:

public void TabAdded(UserControl view)
{
    var item = new TabItem();
    item.Content = view;
    item.IsSelected = true;
    item.Header = "Header Text";
    mainTab.Items.Add(item);
}

وعندما تريد عرض وجهة نظر كما علامة تبويب جديدة، التعليمات البرمجية يبدو شيئا من هذا القبيل:

    var view = new View(params);
    _eventAggregator.GetEvent<InjectTabViewEvent>()
        .Publish(view);

وسيتم اختيار هذا من قبل TabRegionView وستضاف طريقة العرض كما علامة تبويب جديدة. هل يمكن بسهولة التفاف عرض في تسخير بعض النوع الذي يحتوي على نص رأس، صورة ومنطقي لبيان ما إذا كان ينبغي أو لا ينبغي autoselected علامة التبويب.

وIMHO هذه التقنية والمزايا المزدوجة مما يتيح لك السيطرة المباشرة على ما يجري وانه من الاسهل بكثير لاحقا.

وسأكون مهتما جدا للحصول على رأي حول هذا من أي officianados PRISM.

نصائح أخرى

إذا كنت تستخدم RegionManager، تحتاج إلى تفعيل وجهة نظركم. هناك على الأرجح بعض قطعة من التعليمات البرمجية التي تقوم بإضافة وجهة النظر إلى المنطقة، أنت فقط بالإضافة إلى ذلك بحاجة إلى معرفة أن المنطقة لتفعيلها.

public void AddViewToRegion(IRegion region, object view)
{
     region.Add(view);
     region.Activate(view);
}

ويبدو سخيفا، ولكن يمكنك الحصول على السلوك الذي نشهد إذا كنت لا تفعل هذا. لقد وجدت هذا محبط نوعا ما، ولكن كان من السهل بما فيه الكفاية لإصلاح. السلوك هو أكثر غرابة عندما تقوم بإضافة العديد من علامات التبويب إذا لم يكن ما لا يقل عن تفعيل وجهة النظر الأولى إضافة.

وما أفهمه هو أنه إذا كنت لا تفعل هذا، ويرى أبدا يصبح جزء من شجرة المرئية (هذه الآثار الجانبية لحقيقة أن يعطل TabControl علبة (يزيل من شجرة المرئية) عندما يسن علامة التبويب " ر "أمام"، وهذا أمر جيد لعمليات معينة، ولكن يجعل مثل هذه الامور تكون متزعزع قليلا.

بعض الأفكار العشوائية:

  • محاولة إزالة نمط من TabControl
  • تحقق البصرية شجرة مع مساعدة من سنوب أداة.يمكنك أن ترى الخاص بك تابيتيم مع المنظر UserControl تحت TabControl.القادم يمكنك التحقق من ما هو الخطأ في ذلك UserControl و الأطفال (عرض المحتوى).هم ربما خفية لسبب ما.
  • شيء آخر للتفكير - RegionAdapter.RegionAdapters هي المسؤولة عن التكيف مع المناطق آراء لاستضافة UIControl.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top