إعادة المتوسع إلى السلوك الافتراضي انهيار

StackOverflow https://stackoverflow.com/questions/159470

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا باستخدام موسع داخل رسزر (أ ContentControl مع القابض تغيير حجم)، وتوسعها / ينهار بشكل صحيح عندما تأتي السيطرة في البداية حتى. مرة واحدة حجمه، فإن المتوسع لا تنهار بشكل صحيح، كما هو موثق أدناه. ركضت سنوب على طلبي، وأنا لا أرى أي آفاق تعيين على المتوسع أو مكوناته.

وكيف لي أن التوجه نحو إقناع المتوسع للانهيار بشكل صحيح مرة أخرى؟ أو تعديل رسزر للا تجعل المتوسع حزين ستعمل أيضا.

وثائق المتوسع تقول:

<اقتباس فقرة>   

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

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

المحلول 2

ولم تتح لي الفرصة للسخرية حتى هذه المسألة بالذات منذ ذلك الحين، لكنني اكتشفت مؤخرا أن تحديد الطول أو العرض إلى Double.NaN يعيد إلى السلوك الافتراضي الخاص به خالية من روحها.

والمثير للسخرية، وكان هذا من قراءة رمز للسيطرة رسزر كنت تستخدم في المقام الأول.

نصائح أخرى

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

وذلك بفضل

والإجابة عن هذا قليلا في وقت متأخر (2+ سنوات)، ولكن، مهلا، متأخرا أفضل من عدمه، أليس كذلك؟

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

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

وهكذا، أضفت متغير الخاص واثنين من معالجات الأحداث:

    private GridLength _columnWidth;

    private void Expander_Expanded (object sender, RoutedEventArgs e)
    {
        // restore column fixed size saved in Collapse event
        Column2.Width = _columnWidth;
    }

    private void Expander_Collapsed (object sender, RoutedEventArgs e)
    {
        // save current column width so we can restore when expander is expanded
        _columnWidth = Column2.Width;

        // reset column width to auto so the expander will collapse properly
        Column2.Width = GridLength.Auto;
    }

وعندما انهار المتوسع I حفظ عرض ثابت COLUMN2 (والذي تم تغيير من السيارات السيارات سحرية في الخلفية في مكان ما) ثم إعادة العرض إلى السيارات.

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

وهنا يكمن XAML للرجوع اليها:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition x:Name="Column2" Width="Auto" />
    </Grid.ColumnDefinitions>
    <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
        <!-- some content goes here -->
    </ScrollViewer>
    <GridSplitter HorizontalAlignment="Right" VerticalAlignment="Stretch"
         Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="5"
         Background="Black" />
    <Expander Grid.Column="2" ExpandDirection="Left"
         IsExpanded="True" Style="{StaticResource LeftExpander}"
         Expanded="Expander_Expanded" Collapsed="Expander_Collapsed">
        <Grid>
            <TextBox TextWrapping="Wrap" Height="Auto" Margin="0 5 5 5" />
        </Grid>
    </Expander>
</Grid>

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

وأنا لا تزال تبحث عن الحل ... هل في نهاية المطاف العثور على واحد؟

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