WPF DesiredHeight الحدود
-
22-08-2019 - |
سؤال
مايكروسوفت المثال التالي رمز يحتوي على ما يلي:
<Grid>
...
<Border Name="Content" ... >
...
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="True">
<Setter TargetName="ContentRow" Property="Height"
Value="{Binding ElementName=Content,Path=DesiredHeight}" />
</Trigger>
...
</ControlTemplate.Triggers>
عند تشغيل، ومع ذلك، هذا الرمز بإنشاء الخطأ ربط البيانات التالية:
System.Windows.Data Error: 39 : BindingExpression path error: 'DesiredHeight' property not found on 'object' ''Border' (Name='Content')'. BindingExpression:Path=DesiredHeight; DataItem='Border' (Name='Content'); target element is 'RowDefinition' (HashCode=2034711); target property is 'Height' (type 'GridLength')
وعلى الرغم من هذا الخطأ، رمز يعمل بشكل صحيح. لقد بدا من خلال وثائق وDesiredHeight
لا يبدو أن تكون عضوا في Border
. هل يستطيع أحد أن يفسر حيث DesiredHeight
يأتي من؟ أيضا، هل هناك أي وسيلة لحل / قمع هذا الخطأ حتى الانتاج برنامجي نظيفة؟
المحلول
ويمكنك أن ترى أن الملكية في الجزء مدونة طلبك
وتحرير:
Border content = new Border();
int desiredHeight = content.DesiredSize.Height;
int desiredWidth = content.DesiredSize.Width;
لحل المشكلة حاول ملزمة لسمة الطول، منذ DesiredHeight لا يبدو أن تكون متاحة في الترميز XAML لمراقبة الحدود.
نصائح أخرى
ولقد واجهت هذه. على غرار ما قاله user275587، يعمل سبيل المثال بسبب الزناد يزيل Heigth = "0" على RowDefination.
وهكذا يمكنني أن أتحول منطق إعداد ارتفاع / الزناد، وبالتالي فإن RowDefination لا يوجد لديه ارتفاع مجموعة
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Name="ContentRow" />
</Grid.RowDefinitions>
...
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="False">
<Setter TargetName="ContentRow" Property="Height" Value="0" />
</Trigger>
</ControlTemplate.Triggers>
وحاول ذلك.
<Setter
TargetName="content"
Property="Height"
Value="{Binding ElementName=content, Path=DesiredHeight}"
/>
↓
<Setter TargetName="content" Property="Height" Value="NaN"/>
والتجليد لا لزوم لها.
وخطرت لي على نفس القضية في طلبي. في النهاية لقد غيرت رمز لدرجة أنني مثبت وضوح المحتوى بين Collapsed
وVisible
، واستبدال Grid
مع StackPanel
.
ولقد وجدت عموما نوعية العينات قالب السيطرة MS أن تكون جيدة جدا، ولكن كان الخطأ مع هذا واحد محبط قليلا.
ونفس المشكلة، ولكن الحل المقبول من قبل كارلو لا تعمل تماما. المشكلة التي كانت تواجه الملصق يذهب بعيدا ولكن يكسر المتوسع جزئيا -
وإذا كان لديك بعض المحتويات التي تحتاج إلى توسيع في المتوسع توسيع بالفعل، أنها لن تفعل ذلك مع ملزمة ل <م> DesiredSize.Height م>، تحتاج <م> DesiredHeight م> - قد يكون راجعا إلى السبب الذي ساقته user275587.
وكان نفس القضية. كان باستخدام Expander
مخصص في ComboBox
المخصصة.
لا شيء مما سبق عملت بالنسبة لي، ملزمة لHeight
كسر وظائف Expander
، وذلك باستخدام StackPanel
اندلعت أيضا عرض العناصر في كل مجموعة. لقد وجدت:
<Setter TargetName="ContentRow" Property="Height" Value="Auto"/>
وDesiredHeight يأتي من عنصر المحتوى وأنها ملزمة صالحة. أعتقد أن السبب ملزم الخاص بك لا حل لأن DesiredHeight تعتمد على خاصية الطول وأنت لم تحدد الارتفاع الثابت في القالب الخاص بك لذلك يقيم إلى Double.Nan