2016-11-08 64 views
0

我的monthpicker存在一個奇怪的問題。 它在初始化時有很大的寬度。使用MVVM Light工具包發行MonthPicker大小

我正在使用MVVM Light Toolkit,它似乎是造成這個問題。

事實上,一個標準的WPF應用程序,同樣的代碼工作...

另一個提示,沒有彈出式控件,該代碼可以使用MVVM光工具包。

這裏是我的代碼:

<Window x:Class="MvvmLight1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    SizeToContent="WidthAndHeight" 
    Title="MVVM Light Application" 
    DataContext="{Binding Main, Source={StaticResource Locator}}"> 
<Grid> 

     <Popup IsOpen="{Binding ElementName=btn, Path=IsChecked}" StaysOpen="False" > 

      <Calendar x:Name="_calendar" 
         Loaded="_calendar_OnLoaded" 
         DisplayModeChanged="_calendar_DisplayModeChanged" 
         DisplayMode="Month" /> 
     </Popup> 
     <ToggleButton Height="50" Width="100" Content="Click me" x:Name="btn" ClickMode="Release"/> 
</Grid> 

這裏是後面的代碼:

using System.Windows; 
using MvvmLight1.ViewModel; 
using System.Windows.Controls; 

namespace MvvmLight1 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
     private void _calendar_DisplayModeChanged(object sender, CalendarModeChangedEventArgs e) 
     { 
      _calendar.DisplayMode = CalendarMode.Year; 

     } 
     private void _calendar_OnLoaded(object sender, RoutedEventArgs e) 
     { 
      _calendar.DisplayMode = CalendarMode.Year; 
     } 
    } 
} 

而這裏的結果: enter image description here

沒什麼特別的...我現在掙扎了一段時間..任何幫助將是明智的iated!

在此先感謝!

回答

0

好的,所以我找到了解決我的問題。 我已經刪除了日曆的on_Loaded和DisplayModeChanged方法,並將其內容放入彈出的打開事件中。

以下是月份選取器的完整代碼。

的XAML代碼(該按鈕的ressources是從Mahapps地鐵):

<StackPanel Orientation="Horizontal" Grid.Row="1"> 
     <Label Width="100" Height="25" Content="{Binding DateCalendar, Converter={StaticResource MonthConverter} }"/> 
     <Popup IsOpen="{Binding ElementName=btn, Path=IsChecked}" StaysOpen="False" Opened="Popup_Opened" PlacementTarget="{Binding ElementName=btn}" Placement="Right" > 
      <Calendar x:Name="_calendar" 
          DisplayDate="{Binding DateCalendar}" 
          DisplayDateChanged="_calendar_DisplayDateChanged" 
          DisplayMode="Month"/> 
     </Popup> 
     <ToggleButton Style="{StaticResource CircleButton}" x:Name="btn" ClickMode="Release" > 
      <Rectangle Width="16" Height="16" Fill="Black"> 
       <Rectangle.OpacityMask> 
        <VisualBrush Stretch="Fill" Visual="{DynamicResource appbar_calendar}" /> 
       </Rectangle.OpacityMask> 
      </Rectangle> 
     </ToggleButton> 
    </StackPanel> 

這裏是後面的代碼:

private void _calendar_DisplayDateChanged(object sender, CalendarDateChangedEventArgs e) 
    { 
    //If the user click the button of the calendar to change year, the calendar must remains open 
     if (e.RemovedDate.HasValue && e.AddedDate.HasValue) 
     { 
      if (e.RemovedDate.Value.Year == e.AddedDate.Value.Year) 
      { 
       btn.IsChecked = false; 
      } 
     } 
    } 

    private void Popup_Opened(object sender, EventArgs e) 
    { 
     _calendar.DisplayMode = CalendarMode.Year; 
    } 

和轉換器:

class FullDateToMonthConverter : IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((DateTime)value).ToString("MMMM yyyy"); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

我希望這會對某人有用!