سؤال

لدي نافذة مع المستخدم التحكم وأود أن جعل usercontrol العرض يساوي نافذة العرض.كيف تفعل ذلك ؟

المستخدم التحكم في القائمة الأفقية ويحتوي على الشبكة مع ثلاثة أعمدة:

<ColumnDefinition Name="LeftSideMenu" Width="433"/>
<ColumnDefinition Name="Middle" Width="*"/>
<ColumnDefinition Name="RightSideMenu" Width="90"/>

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

تحرير:

أنا باستخدام الشبكة, هناك رمز النافذة:

<Window x:Class="TCI.Indexer.UI.Operacao"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles"
    Title=" " MinHeight="550" MinWidth="675" Loaded="Load" ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" WindowState="Maximized" Focusable="True"
    x:Name="windowOperacao">
    <Canvas x:Name="canv">
        <Grid>
            <tci:Status x:Name="ucStatus"/> <!-- the control which I want to stretch in width -->
        </Grid>
    </Canvas>
</Window>
هل كانت مفيدة؟

المحلول

تحتاج إلى تأكد من usercontrol لم تعيين عرض في usercontrol هو ملف xaml.فقط حذف Width="..." من ذلك وكنت جيدة للذهاب!

تحرير: هذا هو رمز اختبرته مع:

SOUserAnswerTest.xaml:

<UserControl x:Class="WpfApplication1.SOAnswerTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="LeftSideMenu" Width="100"/>
            <ColumnDefinition Name="Middle" Width="*"/>
            <ColumnDefinition Name="RightSideMenu" Width="90"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0">a</TextBlock>
        <TextBlock Grid.Column="1">b</TextBlock>
        <TextBlock Grid.Column="2">c</TextBlock>
    </Grid>
</UserControl>

Window1.xaml:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="415">
    <Grid>

        <local:SOAnswerTest Grid.Column="0" Grid.Row="5" Grid.ColumnSpan="2"/>
    </Grid>
</Window>

نصائح أخرى

ووقماش في WPF لا تقدم الكثير من الدعم التخطيط التلقائي. وأنا أحاول أن توجيه واضح منها لهذا السبب (HorizontalAlignment وVerticalAlignment لا تعمل كما هو متوقع)، ولكن حصلت على التعليمات البرمجية للعمل مع هذه التعديلات الطفيفة (ملزمة العرض والارتفاع للسيطرة على قماش لActualWidth / ActualHeight).

<Window x:Class="TCI.Indexer.UI.Operacao"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tci="clr-namespace:TCI.Indexer.UI.Controles"
Title=" " MinHeight="550" MinWidth="675" Loaded="Load" 
ResizeMode="NoResize" WindowStyle="None" WindowStartupLocation="CenterScreen" 
WindowState="Maximized" Focusable="True" x:Name="windowOperacao">

<Canvas x:Name="canv">
    <Grid>
        <tci:Status x:Name="ucStatus" Width="{Binding ElementName=canv
                                                    , Path=ActualWidth}" 
                                      Height="{Binding ElementName=canv
                                                    , Path=ActualHeight}"/> 
        <!-- the control which I want to stretch in width -->
    </Grid>
</Canvas>

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

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

هل وضع HorizontalAlignment إلى تمدد، والعرض على السيارات على عنصر تحكم المستخدم تحقيق النتائج المرجوة؟

وماذا الحاويات ومن إضافة UserControl إلى؟ عموما عند إضافة عناصر تحكم إلى الشبكة، وسوف تمتد لملء الحيز المتاح (ما لم يتم مقيدة من صف / عمود إلى عرض معين).

وبدلا من ذلك استخدام العرض والارتفاع في عناصر تحكم المستخدم، استخدم MinHeight وMinWidth. ثم يمكنك تكوين UC جيدا، وسوف تكون قادرة على امتداد داخل إطار آخر.

حسنا، كما ايم رؤية في WPF مايكروسوفت قدمت إعادة التفكير حول خصائص النوافذ والسلوكيات، ولكن حتى الآن، لم أكن تفوت أي شيء من الذين تتراوح أعمارهم بين أشكال النوافذ، في WPF التحكم هناك، ولكن في نقطة جديدة لل الرأي.

وهذا عمل بالنسبة لي. عدم تعيين أي عرض أو ارتفاع لفي UserControl وتحديد صف واحد وتعريف العمود في الإطار الأصل.

<UserControl x:Class="MySampleApp.myUC"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d"  
        >
   <Grid>

    </Grid>
</UserControl>


 <Window xmlns:MySampleApp="clr-namespace:MySampleApp"  x:Class="MySampleApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="auto" Width="auto" MinWidth="1000" >
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />           
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />            
    </Grid.ColumnDefinitions>
    <MySampleApp:myUC Grid.Column="0" Grid.Row="0" />       
</Grid>

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