我只是尝试创建一个简单的符号/几何/控件,并在同一窗口的几个地方更改和重用它.
示例:中间有圆圈的黑色正方形.
然后圆圈应该在红色和绿色之间变化(类似于单光红绿灯).使用图像可以实现.我尝试将其解决为Window资源,但我不会解释.
想法:我将它写入资源,在这里我尝试使用Canvas:
<Window.Resources>
<Canvas x:Key="Ampel">
<Rectangle Fill="Black" HorizontalAlignment="Left" Height="52" Stroke="Black" VerticalAlignment="Top" Width="50"/>
<Ellipse x:Name="RedGreen" Fill="Red" HorizontalAlignment="Left" Height="27" Margin="11,12,0,0" Stroke="Black" VerticalAlignment="Top" Width="28" RenderTransformOrigin="0.214,0.256"/>
</Canvas>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
然后我想将它放在网格或面板中,但我如何引用它?
<Canvas x:Name="RedGreen1" Height="50" Width="50" DataContext="{DynamicResource Ampel}" />
Run Code Online (Sandbox Code Playgroud)
这不会返回编译器错误,但在窗口中不显示任何内容.它也不适用于WrapPanel或其他任何东西.
如果它可以工作,我怎么能在代码behing中引用它来改变圆的颜色.有点像RedGreen1.RedGreen.Fill=Brushes.Green?
我读了关于红绿灯的文章.是否真的有必要创建一个UserControl,还是有办法用window.resources来解决它?
应用程序的一般概念是有一个参数列表.如果所有参数都标记为绿色,则每个具有正确输入的都标记为绿色并且只能启动计算.
即使我用红色/绿色图像运行它,我也会尝试更好地理解WPF/XAML并学习一些东西.
谢谢.
我尝试使用 Kotlin 在 Android Studio (AS) 4.1 中创建一个新项目。我使用“空活动”并创建项目“MyTest”。
AS 使用未命名的 TextView“Hello World”创建 activity_main.xml。我将 ID 命名为 myText。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/myText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
创建的 MainActivity.kt 是标准的,看起来像这样
package com.example.mytest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些都是正常的,但是
现在在 MAinActivity.kt 中应该可以输入
myText = "任何字符串"
但这里 myText 不被识别。我不明白。
我有一些来自早期 AS 版本的小型测试项目。它们看起来相同 - 并且可以输入 myText 并且可以立即识别 myText。
我的编码或项目创建有什么问题!创建了几个项目并与以前的项目进行了比较,我认为我的做法没有错。谁有想法?
我阅读、测试并理解了很多来自 Qt 设计器的 QWidgets 使用示例,这些示例已升级到 PyQt5。尽管如此,我无法为我自己处理一个简单的例子。
下面我展示了我的代码,该代码不起作用并尝试解释。
在 Qt 设计器中,我创建了一个简单的 QMainWindow,标准化命名为 MainWindow
我在其中创建了一个标签 QLabel。我将其提升为“neuLabel”类并将其命名为 labelqt。窗口包含 Add 、标题 neulabel.h 和 Promotion --> 一切都很好。
我明白,我必须为 neuLabel 类编写代码。但是:在哪里做呢?
通过非常简单的例子,我尝试了这样的操作:
from PyQt5 import QtWidgets, uic
import sys
uifile_1 = 'testpromote.ui'
form_1, base_1 = uic.loadUiType(uifile_1)
class neuLabel(QLabel, QPixmap):
def __init__(self,title,pixmap,parent):
super().__init__(title,parent)
self.setAcceptDrops(True)
def mousePressEvent(self, e):
QLabel.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print('press')
class myApp(base_1, form_1):
def __init__(self):
super(base_1,self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = myApp() #Dialog()
ex.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
错误是这样的
Traceback (most …Run Code Online (Sandbox Code Playgroud) 也许,我想,事情太简单了。我有一个数据网格,从后面的代码动态添加列。这有效。然后我有带有整数值的列,我希望在列中看到右对齐,但它失败了。我的代码是:
public List<List<int>> IntegerData { get; set; }................
DataGridTextColumn textC = new DataGridTextColumn();
textC.Header = ("Column");
textC.Binding = new Binding(string.Format("[{0}]", i));
textC.Binding.StringFormat = "00000";
Run Code Online (Sandbox Code Playgroud)
最后我有类似的东西:
myDataGrid.Itemssource = IntegerData
Run Code Online (Sandbox Code Playgroud)
使用 textC.Binding.String.Format 的问题是:(首先:看来,stringFormat-LIne 正确重载了前一行)
格式“0”给出一个整数“1”“2”,这是正确的。
格式“00000”给出“00001”“00002”“00003”,这对于字符串格式是正确的,但不是我想要的
但:
格式 "######" 也给出 "1" "2" .. 等等(左对齐,没有前导空格)
由于格式规则我期望(或希望), ##### 是所描述的占位符,结果是 "bbbb1" , "bbbb2" 右对齐。(b 在这里是空白!)
所以绑定似乎正确处理“00000”格式,但不能正确处理“######”格式。有人对这个想法有任何想法或经验吗?(我在互联网上找到的所有其他绑定要复杂得多)
wpf ×2
c# ×1
code-behind ×1
kotlin ×1
pyqt ×1
pyqt5 ×1
python ×1
python-3.6 ×1
qt-designer ×1
resources ×1
textview ×1
xaml ×1