WPF עיצוב הדטה-גריד
-
אם אתה לא רוצה שורות אחרי העמודה האחרונה תוכל בצורה פשוטה או להרחיב את אחת העמודות לכל יכולתה ע"י Width="*" או ליישר את כל הפקד לימין.
אבל אם אתה רוצה את המראה המדוייק של DataGridView ראיתי ע"ז פוסט כאן
http://stackoverflow.com/questions/14089705/can-the-wpf-datagrid-control-be-made-to-behave-like-the-winforms-datagridcontrolפורסם במקור בפורום CODE613 ב06/01/2014 17:59 (+02:00)
-
נפלא ממש !
תודה רבה!
הקוד שהשתמשתי בו מהקישור שהבאת הוא:<Window.Resources> <Style TargetType="DataGridRow"> <Setter Property="HorizontalAlignment" Value="Left" /> </Style> <Style TargetType="DataGridColumnHeadersPresenter"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}"> <Grid> <ItemsPresenter /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources>
אפשר גם להוסיף משהו לסטולים האלו כדי שיופיע צל מתחת לעמודות וזה יראה כמו גליון אקסל אחרי שמסתירים עמודות ושורות ?
פורסם במקור בפורום CODE613 ב06/01/2014 18:07 (+02:00)
-
הוספתי כך כדי לעשות צל:
<Window.Resources> <DropShadowEffect x:Key="ShadowEffect" BlurRadius="15" Color="#FFB6B7BE" /> <Style TargetType="DataGridRow"> <Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="Effect" Value="{StaticResource ResourceKey=ShadowEffect}" /> </Style> <Style TargetType="DataGridColumnHeadersPresenter"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}"> <Grid> <ItemsPresenter Effect="{StaticResource ResourceKey=ShadowEffect}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources>
אבל זה נתן צל וגם טישטש את הכתב בתוך התאים של הדטה גריד.
פורסם במקור בפורום CODE613 ב06/01/2014 18:40 (+02:00)
-
עשית מצויין בקוד שלך (רק שראשית עשית פעמיים את האפקט (מספיק אחד ועדיף הההוא של הItemsPresenter), ושנית, כל מקטע הסטייל של DataGridColumnHeadersPresenter מיותר).
הסיבה שהטקסט [u:1yl07xq2]נראה[/u:1yl07xq2] מטושטש יותר, זה בגלל שבתור איבר תצוגה מקונן של אלמנט עם אפקט הוא מרונדר כתמונה.
כדי לגרום לזה להיות בסדר, מוכרחים לתת את העיצוב במקום הנכון אבל לא להורה.
ולכן הייתי עושה אחרת מאשר הקוד הזה, ומטמפלט את כל הדטהגריד ולא את הDataGridRow.
אם יש לך כבר טמפלט מותאם אישית לדטה גריד, החלף את השורה הזאת:<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
בשורות אלו:
<Grid HorizontalAlignment="Left" VerticalAlignment="Top"> <Border Background="#FFBD4848"> <Border.Effect> <DropShadowEffect BlurRadius="15" Color="#FFB6B7BE" /> </Border.Effect> </Border> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Grid>
זה מספיק בשביל שני העניינים (המרחב והצל).
פורסם במקור בפורום CODE613 ב06/01/2014 20:24 (+02:00)
-
משהו פה לא מסתדר לי מה צריך בדיוק לתקן תוכל בבקשה לשים את הקוד המלא מ <Window.Resources> עד </Window.Resources>
אני מעדיף שלא, כפי שששמת לב.
אני מבין שניסית להחליף בקוד שהבאת, בעוד שאני שאלתי ברורות: "יש לך טמפלט לדטה גריד כבר"? נסה לקרוא ביתר תשומת לב פעם הבאה.הנה הקוד המלא:
<ControlTemplate x:Key="dgTemplate" TargetType="{x:Type DataGrid}"> <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"> <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false"> <ScrollViewer.Template> <ControlTemplate TargetType="{x:Type ScrollViewer}"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Button Command="{x:Static DataGrid.SelectAllCommand}" Focusable="false" Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" Grid.Column="1" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" Grid.ColumnSpan="2" Grid.Row="1"/> <ScrollBar x:Name="PART_VerticalScrollBar" Grid.Column="2" Maximum="{TemplateBinding ScrollableHeight}" Orientation="Vertical" Grid.Row="1" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/> <Grid Grid.Column="1" Grid.Row="2"> <Grid.ColumnDefinitions> <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <ScrollBar x:Name="PART_HorizontalScrollBar" Grid.Column="1" Maximum="{TemplateBinding ScrollableWidth}" Orientation="Horizontal" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/> </Grid> </Grid> </ControlTemplate> </ScrollViewer.Template> <Grid HorizontalAlignment="Left" VerticalAlignment="Top"> <Border Background="#FFBD4848"> <Border.Effect> <DropShadowEffect BlurRadius="15" Color="#FFB6B7BE" /> </Border.Effect> </Border> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> </Grid> </ScrollViewer> </Border> </ControlTemplate>
פורסם במקור בפורום CODE613 ב06/01/2014 21:00 (+02:00)