You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JetBrains Rider中自定义Avalonia CalendarDatePicker:移除弹出日历右侧空白

解决Avalonia CalendarDatePicker弹出日历右侧空白问题

你看到的右侧空白是Calendar控件默认样式的遗留布局——默认模板里包含了用于切换年份、月份的侧边容器,即便你设置了DisplayMode="Month",这些容器仍会占用空间。

直接修改Calendar的模板就能解决,以下是整合后的完整样式代码:

<!-- CalendarDatePicker 自定义样式 -->
<Style Selector="CalendarDatePicker">
    <Setter Property="Template">
        <ControlTemplate>
            <Grid>
                <Border Background="{DynamicResource Vana}"
                        BorderBrush="{DynamicResource Vatika}"
                        BorderThickness="0,0,0,1"
                        CornerRadius="0">
                </Border>
                <Grid ColumnDefinitions="4*,Auto" VerticalAlignment="Center">
                    <TextBox x:Name="PART_TextBox"
                             CornerRadius="0"
                             FontFamily="Verdana"
                             FontSize="14"
                             Foreground="{DynamicResource Dhumra}"
                             Grid.Column="0">
                    </TextBox>
                    <Button x:Name="PART_Button"
                            BorderBrush="{DynamicResource Vatika}"
                            BorderThickness="0,0,0,1"
                            Content="📅"
                            CornerRadius="0"
                            Grid.Column="1"
                            Width="50">
                    </Button>
                </Grid>
                <Popup x:Name="PART_Popup"
                       Placement="Bottom"
                       IsLightDismissEnabled="True"
                       IsOpen="{TemplateBinding IsDropDownOpen}">
                    <Border Background="{DynamicResource Vana}"
                            Padding="0"
                            CornerRadius="4">
                        <!-- 应用自定义样式的Calendar -->
                        <Calendar x:Name="PART_Calendar"
                                  Background="{DynamicResource Vana}"
                                  BorderThickness="1" 
                                  Foreground="{DynamicResource Rajat}"
                                  DisplayMode="Month"/>
                    </Border>
                </Popup>
            </Grid>
        </ControlTemplate>
    </Setter>
</Style>

<!-- 移除Calendar右侧空白的自定义样式 -->
<Style Selector="Calendar">
    <Setter Property="Template">
        <ControlTemplate>
            <Grid Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}">
                <!-- 仅保留月份视图,移除默认的侧边切换控件 -->
                <CalendarMonthView x:Name="PART_MonthView"
                                   Foreground="{TemplateBinding Foreground}"
                                   Background="{TemplateBinding Background}"/>
            </Grid>
        </ControlTemplate>
    </Setter>
</Style>

原理说明:

  • 自定义Calendar模板时,直接去掉了默认模板中用于显示年份选择器、月份切换按钮的侧边布局元素,只保留核心的PART_MonthView月份视图组件
  • 这样Calendar就只会渲染月份日历部分,不会预留右侧的空白空间

内容的提问来源于stack exchange,提问作者Athang Tikekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:12:28