你好,我想用C#WPF構建一個科學計算器。如何在調整大小小於或大於特定寬度和高度時更改表單?
我想要做的是通過調整UI大小小於或大於特定大小(具有特定寬度和高度)來將形式從簡單計算器更改爲科學計算器。
是否有關於此功能的任何文章或示例?
非常感謝。
我想說明我的想法:
像IPhone計算器,當我旋轉屏幕計算器將會是科學模式,所以這就是我想要的Windows程序,當我拖動來調整計算器,模式將會改變。
你好,我想用C#WPF構建一個科學計算器。如何在調整大小小於或大於特定寬度和高度時更改表單?
我想要做的是通過調整UI大小小於或大於特定大小(具有特定寬度和高度)來將形式從簡單計算器更改爲科學計算器。
是否有關於此功能的任何文章或示例?
非常感謝。
我想說明我的想法:
像IPhone計算器,當我旋轉屏幕計算器將會是科學模式,所以這就是我想要的Windows程序,當我拖動來調整計算器,模式將會改變。
這一個可能會被標記,因爲它不是很清楚你要問什麼。如果我的理解問題的權利,那麼你需要從你的窗口中刪除的寬度和高度參數,並設定WindowStyle
,SizeToContent
和ResizeMode
:
<Window x:Class="GuiTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Calculator"
WindowStyle="SingleBorderWindow"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize" FontSize="20">
<StackPanel Orientation="Vertical">
<Border BorderBrush="Black" BorderThickness="1" Background="LightGray" HorizontalAlignment="Stretch" Height="60" Margin="5" >
<TextBlock Text="0" TextAlignment="Right" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="5" FontSize="40" />
</Border>
<UniformGrid Columns="4">
<UniformGrid.Resources>
<Style TargetType="Button" >
<Setter Property="Margin" Value="5" />
<Setter Property="Width" Value="60" />
<Setter Property="Height" Value="60" />
</Style>
</UniformGrid.Resources>
<Button Content="CE" />
<Button Content="C" />
<Button Content="<" />
<Button Content="÷" />
<Button Content="7" />
<Button Content="8" />
<Button Content="9" />
<Button Content="x" />
<Button Content="4" />
<Button Content="5" />
<Button Content="6" />
<Button Content="-" />
<Button Content="1" />
<Button Content="2" />
<Button Content="3" />
<Button Content="+" />
<Button Content="±" />
<Button Content="0" />
<Button Content="." />
<Button Content="=" />
</UniformGrid>
</StackPanel>
結果是自動調整大小以內容的窗口,不能調整大小:
UPDATE:
噢好吧,那是非常不同的:)實際上有很多方法可以做到這一點,我將提供一個不會執行MVVM或其他任何操作的簡單方法。你需要做的就是添加控件模板TP的窗口的資源部分,每個模式和子控件來顯示他們:
<Window.Resources>
<ControlTemplate x:Key="Standard">
<TextBlock Text="Standard Mode" />
</ControlTemplate>
<ControlTemplate x:Key="Scientific">
<TextBlock Text="Scientific Mode" />
</ControlTemplate>
</Window.Resources>
<ContentControl x:Name="myPanel" />
然後,你需要添加一個SizeChanged
處理器,着眼於新的大小和選擇爲控制相應的模板使用方法:
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (e.NewSize.Width > e.NewSize.Height)
this.myPanel.Template = this.Resources["Scientific"] as ControlTemplate;
else
this.myPanel.Template = this.Resources["Standard"] as ControlTemplate;
}
拖動窗口周圍,你會看到相應控件的外觀變化。
當我明白你的問題,
你想在一個單一的形式顯示簡單的科學計算器。並有一些選項..說按鈕..這將關閉科學計算簡單的計算。
因此,創建兩個面板..
面板1 >>保持它裏面的所有簡單計算的控制面板 2 >>保持它裏面的所有科學的控制。
當你點擊按鈕開啓/關閉簡單/科學計算..
讓一個按鈕單擊事件和隱藏一個面板,並顯示相應等。並相應地調整窗口的大小,
<WrapPanel Name="simple" Height="300" Width="300" >
<StackPanel>
<Button Content="1" Height="23" Name="button1" Width="40" />
<Button Content="4" Height="23" Name="button4" Width="40" />
<Button Content="7" Height="23" Name="button7" Width="40" />
</StackPanel>
<StackPanel>
<Button Content="2" Height="23" Name="button2" Width="40" />
<Button Content="5" Height="23" Name="button5" Width="40" />
<Button Content="8" Height="23" Name="button8" Width="40" />
</StackPanel>
</WrapPanel>
<WrapPanel Name="scientific" Height="300" Width="500" >
<StackPanel>
<Button Content="1" Height="23" Name="sbutton1" Width="40" />
<Button Content="4" Height="23" Name="sbutton4" Width="40" />
<Button Content="7" Height="23" Name="sbutton7" Width="40" />
</StackPanel>
<StackPanel>
<Button Content="2" Height="23" Name="sbutton2" Width="40" />
<Button Content="5" Height="23" Name="sbutton5" Width="40" />
<Button Content="8" Height="23" Name="sbutton8" Width="40" />
</StackPanel>
<StackPanel>
<some more controls...>
</StackPanel>
</WrapPanel>
上的按鈕單擊事件使用:
simple.visibility=Visibility.Hidden;
scientific.visibility=Visibility.visible;
,反之亦然
我認爲你正在尋找這個
<Window x:Class="Q4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Q4"
mc:Ignorable="d"
Title="Calculator"
WindowStyle="SingleBorderWindow"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize" FontSize="20">
<StackPanel Orientation="Vertical">
<Border BorderBrush="Black" BorderThickness="1" Background="LightGray" HorizontalAlignment="Stretch" Height="60" Margin="5" >
<TextBlock Text="0" TextAlignment="Right" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Padding="5" FontSize="40" />
</Border>
<UniformGrid Columns="4">
<UniformGrid.Resources>
<Style TargetType="Button" >
<Setter Property="Margin" Value="5" />
<Setter Property="Width" Value="60" />
<Setter Property="Height" Value="60" />
</Style>
</UniformGrid.Resources>
<Button Content="CE" />
<Button Content="C" />
<Button Content="SC" Click="Button_Click"/>
<Button Content="÷" />
<Button Content="7" />
<Button Content="8" />
<Button Content="9" />
<Button Content="x" />
<Button Content="4" />
<Button Content="5" />
<Button Content="6" />
<Button Content="-" />
<Button Content="1" />
<Button Content="2" />
<Button Content="3" />
<Button Content="+" />
<Button Content="±" />
<Button Content="0" />
<Button Content="." />
<Button Content="=" />
<Button Content="Sin" x:Name="sinBtn" Visibility="Collapsed"/>
<Button Content="Cos" x:Name="cosBtn" Visibility="Collapsed"/>
<Button Content="Log" x:Name="logBtn" Visibility="Collapsed"/>
<Button Content="e" x:Name="eBtn" Visibility="Collapsed"/>
</UniformGrid>
</StackPanel>
</Window>
而且代碼隱藏
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
sinBtn.Visibility = Visibility.Visible;
cosBtn.Visibility = Visibility.Visible;
logBtn.Visibility = Visibility.Visible;
eBtn.Visibility = Visibility.Visible;
}
}
就像iPhone上的計算器一樣,當我旋轉屏幕時,計算器將處於科學模式,所以當我拖動調整計算器的大小時,這就是我想要的Windows程序,模式將會改變。 –
更新了我的答案。 –
非常感謝您 –