سؤال

مايكروسوفت المثال التالي رمز يحتوي على ما يلي:

<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

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