WPF קינון פקדים בראש שורה בדטה-גריד
-
אני חושב שיש לי פתרון:
- אפשר להגדיר שהלחצן שבראש השורה יהיה בתוך גריד צמוד לחלק העליון של הגריד, אם גובה הגריד יהיה כגובה השורה הרי שהלחצן יהיה תמיד באותו מקום ולא ירד לאמצע.
- כדי לשנות את גובה הגריד כאשר גובה השורה משתנה יש ארוע שינוי גובה שורה שאפשר ליצור כמתואר כאן.
איך עושים את זה בדרך הנכונה?
למשל הקוד הבא לא עובד, רק בחלק אחד, כלומר הגריד אכן מקבל את גובה השורה אבל כאשר הגובה משתנה הבינדינג משום מה לא מעדכן את גובה הגריד בחזרה.<DataGrid.RowHeaderTemplate> <DataTemplate> <Grid Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridRow, AncestorLevel=1}, Path=ActualHeight}" Background="#FFD31C1C"> <Button Content="+" VerticalAlignment="Top" > </Button> </Grid> </DataTemplate> </DataGrid.RowHeaderTemplate>
פורסם במקור בפורום CODE613 ב31/12/2013 13:20 (+02:00)
-
הקישור שהבאת היה מצויין.
הנה דרך קלה ליצור טמפלט כמו שהובאה שם:
כתוב בתוך הXAML שלך במקום פנוי את השורה הזאת:<DataGridRowHeader />
בחלונית Document Outline תקליק בימיני על האלמנט הזה DataGridRowHeader,
לחץ על Edit Template ואז Edit a Copy.
בתיבת הדו שיח בחר בDefinen In בApplication.
אחרי היצירה מחק מהשורה הראשונה את הx:Key עם הערך.
לאחמ"כ אתר את השורה הזאת:<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
בסוף השורה החלף אתCenter לTop.
כעת תוכל למחוק את האלמנט DataGridRowHeader הריק שיצרת.
פורסם במקור בפורום CODE613 ב31/12/2013 15:49 (+02:00)
-
זה לא סותר תשתמש בשתיהם...
הנה הXAML:
<Style xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" TargetType="{x:Type DataGridRowHeader}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridRowHeader}"> <Grid> <Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" IsSelected="{TemplateBinding IsRowSelected}" Orientation="Horizontal" Padding="{TemplateBinding Padding}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> <StackPanel Orientation="Horizontal"> <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Top"/> <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/> </StackPanel> </Themes:DataGridHeaderBorder> <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Top"/> <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource RowHeaderGripperStyle}" VerticalAlignment="Bottom"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
תדביק את זה בApplication.xaml כך זה יחול על הכל בכל.
פורסם במקור בפורום CODE613 ב02/01/2014 16:48 (+02:00)
-
@דוד ל.ט.
Application.xaml
מדובר בפרוייקט DLL ואין שם את זה, יש איזו חלופה?
בנתיים שמתי בתוך הUSER FORM ואלו השגיאות שקיבלתי:
The resource "bool2VisibilityConverter" could not be resolved.
The resource "RowHeaderGripperStyle" could not be resolved.פורסם במקור בפורום CODE613 ב02/01/2014 17:58 (+02:00)
-
רפרנס ל PresentationFramework.Aero וניימספייס כבר הוספתי בתחילה ולכן לא היו אלא רק שני שגיאות שציינתי.
פורסם במקור בפורום CODE613 ב02/01/2014 19:44 (+02:00)
-
מקווה שכעת טוב.
<Style TargetType="{x:Type DataGridRowHeader}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridRowHeader}"> <Grid> <Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" IsSelected="{TemplateBinding IsRowSelected}" Orientation="Horizontal" Padding="{TemplateBinding Padding}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}"> <StackPanel Orientation="Horizontal"> <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Top"/> <Control SnapsToDevicePixels="False" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGridRow}}}"> <Control.Visibility> <Binding Path="(Validation.HasError)" RelativeSource="{RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type DataGridRow}}"> <Binding.Converter> <BooleanToVisibilityConverter/> </Binding.Converter> </Binding> </Control.Visibility> </Control> </StackPanel> </Themes:DataGridHeaderBorder> <Thumb x:Name="PART_TopHeaderGripper" VerticalAlignment="Top"> <Thumb.Style> <Style TargetType="{x:Type Thumb}"> <Setter Property="Height" Value="8"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Cursor" Value="SizeNS"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Thumb}"> <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Thumb.Style> </Thumb> <Thumb x:Name="PART_BottomHeaderGripper" VerticalAlignment="Bottom"> <Thumb.Style> <Style TargetType="{x:Type Thumb}"> <Setter Property="Height" Value="8"/> <Setter Property="Background" Value="Transparent"/> <Setter Property="Cursor" Value="SizeNS"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Thumb}"> <Border Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Thumb.Style> </Thumb> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
פורסם במקור בפורום CODE613 ב05/01/2014 13:23 (+02:00)